Error reading all records from a.txt file in C

Asked

Viewed 75 times

0

Can anyone tell me why this my code just returns the first record several times, instead of returns all the records?

Function in the Code

void listarDados(int quantidadeContatos) {
    char caracteres;
    FILE *arquivo = fopen("contato.txt", "rb");
    struct contato *vPtrContato = &contato_ref;

    if (arquivo == NULL) {
        printf("Erro, nao foi possivel abrir o arquivo\n");
    } else {
        while (!feof(arquivo)) { 
            rewind(arquivo); 
            fread(vPtrContato, sizeof (contato_ref), 1, arquivo);
            printf("Nome: %s\n", contato_ref.primeiroNome);
            printf("Sobrenome: %s\n", contato_ref.segundoNome);
            printf("Telefone: %s\n", contato_ref.numeroTelefone);
            printf("E-mail: %s\n", contato_ref.email);
            printf("==================================\n");
            fclose(arquivo);
       }
    }
}

3 answers

3


The function Rewind() (roughly speaking) serves to return to the beginning of the file, ie fread passes on but the Rewind goes back to the beginning.

  • I took the Rewind and still returns only the first record. Only repeatedly.

  • Had not seen, you close the file inside while, delete the fclose() line and see.

0

Code with complete listing of all txt file records

void listarDados() {
    FILE *arquivo = fopen("contato.txt", "rb");
    struct contato *vPtrContato = &contato_ref;

    /*se o arquivo nao existir, mostra msg de erro*/
    if (arquivo == NULL) {
        printf("Erro, nao foi possivel abrir o arquivo\n");
    } else {
        /*caso o arquivo exista, leia-o ate o fim do arquivo*/
        printf("==================================\n");
        printf("Resultado da pesquisa\n");
        printf("==================================\n");
        while (!feof(arquivo)) { //enquanto não chegar no fim do arquivo, continue lendo
            /*funcao para ler arquivo
             referencia do elemento que sera lido, que no caso e a referencia d struct
             * a quantidade de dados que sera lida, que no caso e o tamanho da struct
             * referencia do arquivo
             */

            fread(vPtrContato, sizeof (contato_ref), 1, arquivo);

            printf("Nome: %s\n", contato_ref.primeiroNome);
            printf("Sobrenome: %s\n", contato_ref.segundoNome);
            printf("Telefone: %s\n", contato_ref.numeroTelefone);
            printf("E-mail: %s\n", contato_ref.email);
            printf("===================================\n");
        }
        fclose(arquivo);
    }
}

-2

The problem is being caused by the Rewind function, as it has the role of going back to the beginning of the file.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.