1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Escrever para ficheiro (ler tb) em C

Discussão em 'Programação' iniciada por Pontiac, 22 de Janeiro de 2006. (Respostas: 24; Visualizações: 4382)

  1. Pontiac

    Pontiac Power Member

    Boas,
    Alguem me pode dar umas luzes de como escrever um profile (tipo nome, nº, data, etc.) para um ficheiro e depois escrever outro por baixo?
    Vou tentar explicar o melhor possivel. É que o problema não é escrever o 1º, é que depois ao escrever o 2º profile, isto escreve por cima do 1º.
    Já li mt coisa acerca de escrever para ficheiros mas só o que arranjo é explicações um pouco básicas do tipo fazes fprintf etc etc..
    ajudem pk estou complentamente sem ideias...
     
  2. greven

    greven Folding Artist

    Já há bastante tempo que não programo em C (isso vai mudar brevemente...) por isso não te posso dar a certeza absoluta.

    Mas penso que isso te está a acontecer pois estás a abrir o ficheiro no modo r. Tenta abrir no modo a+ e o cursor de escrita está no fim do ficheiro e não no inicio como no modo r.

    Vê se te ajuda.
     
  3. Madril

    Madril 1st Folding then Sex

    Fazes fprintf e acabas a string com \n ... ele mete o file pointer pra linha seguinte.

    Vi agora a resposta do greven ... tens k abrir como "w" ... e se tiveres que abrir o ficheiro pela segunda vez por exemplo, tens que percorrer até lá abaixo.

    Vai ver os manuais da Gnu por exemplo ;)
     
  4. Pontiac

    Pontiac Power Member

    É isso mesmo!! resultou na perfeição, obrigado.
     
  5. Madril

    Madril 1st Folding then Sex

    Qual solução ?

    A minha ou a do Merven ?
     
  6. Pontiac

    Pontiac Power Member

    A do Greven, a tua é para muda de linha no ficheiro o que tambem a usei. :D
    So uma coisa agora para ler do ficheiro se eu puser algo do genero: while(i!= "\n") manda para uma variavel etc.. ele reconhece o \n como sendo o fim de uma linha no ficheiro?
     
  7. greven

    greven Folding Artist

    Penso que sim... mas nada melhor que um debug! :D Experimenta e vê. Esses pequenos pormenores eu relembro trying! ;)

    Madril, és um noob! :D
     
  8. PrOdG

    PrOdG Power Member

    $ man fopen
    Se quiseres ler linha a linha, tens sempre o fgets (lembra-te que o '\n' fica no fim da string que lês).
     
  9. Galbne_PT

    Galbne_PT Power Member

    Já algum tempo k não programo em c, mas no tempo que k era obrigado em programar em c lembro-me k existe uma funcão mt boa para o deu caso, tens é de ver no google ou algo do genero como usa-la bem.... a funcao é a fseek, pelo k me lembro poe o offset na posicao do ficheiro onde kiseres...
     
  10. Pontiac

    Pontiac Power Member

    Agora tenho outro problema :\
    Quando faço fgets(..) isto lê bem a primeira linha mas não faço a minima ideia como o ponho a ler a 2ª linha e mandar essa 2ª para outra variavel...
    Ja tentei dar a volta á questão usando fscanf mas ao ler um %s só lê a primeira palavra... Presumo que com %s não va a lado nenhum porque a linha tanto pode ter 1 com 2,3 palavras...
    Alguem me pode ajudar a por isto a lêr linha a linha?
     
  11. Madril

    Madril 1st Folding then Sex

    while(fgets pra um buffer)
     
  12. HecKel

    HecKel The WORM

    A solução do Madril para mim de facto é a melhor, mas cá vai uma curta explicação (se conseguir....)

    A cada iteracção do while o "ponteiro" que "indica" a linha "desce", dentro do while basta fazeres fgets como se estivesses a ler apenas uma linha, o while trata de te "mover" o ponteiro para baixo...

    btw, usa o !EOF(f) para evitares que estoire ;)

    abraços, HecKel
     
  13. Madril

    Madril 1st Folding then Sex

    EOF pra que ?

    é só fazer man ao fgets ... alem disso o fgets se bem me lembro diz o numero de caracteres lidos, pelo que quando chega ao fim dá 0 :rolleyes:
     
  14. Pontiac

    Pontiac Power Member

    Epah ja não tou a perceber nada,
    Eu tenho isto:

    FILE *produtores;

    produtores = fopen ("produtores.txt","r");


    while (>>n sei k condição meter<<) {

    fgets(produtor.nome,80, produtores);

    printf("%s \n", produtor.nome );

    }

    kualker coisa que meta dentro da condigão do while entra sempre em ciclo infinito, ja exprimentei
    while (fgetc(produtores)!='\n')

    para que quando axasse um \n parasse, mas continua sempre e na mesma linha .
     
  15. Madril

    Madril 1st Folding then Sex

    Metes o fgets na condição do while
     
  16. Pontiac

    Pontiac Power Member

    LOL e não é que da mesmo, não percebo é a lógica disso mas funciona :D
     
  17. HecKel

    HecKel The WORM

    ahhh, Madril tava a pensar noutra cena..., sorry :(

    abraços, HecKel
     
  18. HiGhVoIcE

    HiGhVoIcE Power Member

    podes por funções como condições em whiles, if, etc...por algum motivo as funções podem ter retorno de algo ;)
     
  19. porque nao fazes assim?

    while( caracter = fgetc( produtos ) )
    if( caracter != '\n' )
     
  20. olha eskece mete antes só: while( !EOF ).
    deve chegar para sacares todas as strings uma de cada vez até ao fim do ficheiro.
     

Partilhar esta Página