Как читать из файла .txt и разделять каждую строку на разные строки и хранить их в разных переменных структуры? - PullRequest
0 голосов
/ 05 мая 2019
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct record
{
     char id[10];
     char firstName[20];
     char lastName[20];
     char score[5];
};

int main()
{
    FILE *fileptr;
    fileptr=fopen("students.txt","r");

    struct record *pinakas;

    pinakas=(struct record *)malloc(17*sizeof(struct record));

    fflush(stdin);
    int i,j;
    for(i=0; i<16; i++)
    {
        fgets(pinakas+i,70,fileptr);
    }

    for(i=0; i<16; i++)
    {
        puts(pinakas+i);
    }

    fclose(fileptr);
    free(pinakas);

    return 0;
}

и допустим, у меня есть следующий файл .txt:

RT56996 Джордж Кларк 9.0

RT68494 Эмилия Андерсон 6.0

. , .

RT5858 Хелен Уайт 10.0

То, что я делаю здесь, как вы видите, это то, что я читаю файл и сохраняю каждую строку в struct object "pinakas". Проблема в том, что я не знаю, как разделить каждое (pinakas + i) на пробел и сохранить каждую строку в id, firstName, lastName, Score ... Любая идея?

1 Ответ

0 голосов
/ 05 мая 2019

Вы можете попробовать использовать fscanf в качестве кода ниже, это функция, используемая для сканирования файлов. "% [^]" означает сканирование всего, пока не будет найдено ''. «% [^ \ n]» означает сканирование всего, пока не будет найдено «\ n».

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct record{
 char id[10];
 char firstName[20];
 char lastName[20];
 char score[5];
};

int main(){
FILE *fileptr;

int i=0,idx=0;

fileptr=fopen("students.txt","r");
struct record *pinakas;
pinakas=(struct record *)malloc(17*sizeof(struct record));

if(fileptr){
    while(!feof(fileptr)){
        fscanf(fileptr,"%[^ ] %[^ ] %[^ ] %[^\n]\n",pinakas[idx].id,pinakas[idx].firstName,pinakas[idx].lastName,pinakas[idx].score);
        idx++;
    }
}

int i=0;

for(i=0; i<idx; i++){
    printf("%s %s %s %s\n",pinakas[i].id,pinakas[i].firstName,pinakas[i].lastName,pinakas[i].score);
}

fclose(fileptr);

return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...