Error reading all the records of a .txt file in C

0

Can anyone tell me why this my code just returns the first record multiple times, instead of returning 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);
       }
    }
}
    
asked by anonymous 16.12.2018 / 18:09

3 answers

2

The function rewind () (speaking roughly) serves to return to the beginning of the file, ie fread passes through but the rewind returns to the beginning.

    
16.12.2018 / 18:34
0

Code with the complete listing of all records in the txt file

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);
    }
}
    
17.12.2018 / 13:43
-2

The problem is being caused by the rewind function because it has the role of going back to the beginning of the file.

    
25.12.2018 / 13:09