Функция для чтения текстового файла и передачи этой информации в динамический c вектор - PullRequest
0 голосов
/ 20 июня 2020

Создайте функцию для чтения текстового файла и передачи его имени в динамический c вектор структур. Я читаю файл, но на экране ничего не отображается.

typedef struct aluno student;
struct aluno{
       
       char name[50], address[50], number[9];
       int year;enter code here

};

student *lerFicheiroTexto(char *nameFile, int *tam){

        FILE *f1;
        student buffer;
        student *aux;
        student *vetor = NULL;
        f1 = fopen(nameFile, "rt");
        if(f1 == NULL){
            printf("Error opening the file text");
            return NULL;
        }

        
        while(fscanf(f1, "%s %s %d %s", buffer.name, buffer.address, &buffer.year, buffer.number) == 3){
               
                printf("%s\t%s\n%d\n%s\n", buffer.name, buffer.address, buffer.year, buffer.number);
                aux = realloc(vetor, sizeof(student)*(*tam+1));
                  if(aux == NULL){
               //realocation failled
               printf("Reallocation failled. Maintain tam \n");
               (*tam) = 0;
               return NULL;
           }
                  else{
                      
                      vetor = aux;
                      vetor[(*tam)] = buffer;
                  
                  }
                
            (*tam)++;
        }
        
        
        fclose(f1);
        return vetor;
}

1 Ответ

0 голосов
/ 21 июня 2020

Мне нужен ваш входной файл, чтобы проверить это, но я немного изменил ваш код. Я тоже студент, поэтому приношу свои извинения, если я сделал что-то не так.

Из того, что я вижу, я считаю, что ваш код можно улучшить следующим образом:

Определение структуры:

typedef struct aluno {
    char name[50], address[50], number[9];
    int year;
} Aluno;

Функция для чтения файла и построения вашего массива:

Aluno* lerFicheiroTexto(char* nameFile, int tamanho)
{
    FILE* file = fopen(nameFile, "r");

    if (file == NULL) {
        printf("Error opening the file text");
        return NULL;
    }

    Aluno* listaAlunos = malloc(sizeof(Aluno));
    char line[255];
    while (fgets(line, 255, file) != NULL) {
        Aluno currAluno;
        sscanf(line, "%s %s %d %s", currAluno.name, currAluno.address, currAluno.year, currAluno.number);

        listaAlunos[tamanho] = currAluno;

        listaAlunos = realloc(listaAlunos, sizeof(Aluno) * ++tamanho);
    }

    fclose(file);
    return listaAlunos;
}
...