Как читать () 2 структуры вместе C - PullRequest
0 голосов
/ 31 января 2019

Как отобразить 2 fread() операторов в 1 строке.

Вот часть моего кода:

FILE *fp;
fp = fopen("hello", "rb");

struct clientName NAME;
struct clientAge AGE;

system("cls");
if(fp == NULL){
printf("ERROR");
getch();
}
else{
printf("NAME\t\tAGE\n");
printf("-----------------------------------------\n");
while((fread((char *)&NAME, sizeof(struct clientName), 1, fp))==1){
    printf("%s", NAME.name);    
    while((fread((char *)&AGE, sizeof(struct clientAge), 1, fp))==1){
        printf("\t\t%d", AGE.age);
    }
}

Когда есть 1 набор данных, форматированиеправильный.Но когда есть 2 или более наборов данных, они начинают портиться.Я действительно новичок в обработке файлов в C. Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Превратите

while((fread((char *)&AGE, sizeof(struct clientAge), 1, fp))==1)

в

if((fread((char *)&AGE, sizeof(struct clientAge), 1, fp))==1)

В противном случае вы прочитаете clientName, а затем продолжите чтение clientAge несколько раз, пока выполняется итерация while, поскольку файл не закончился.Конечно, синтаксический анализ будет недействительным, поскольку ваш файл содержит данные для имени, возраста, имени, возраста и т. Д. Поэтому при попытке проанализировать файл по имени, возрасту, возрасту, возрасту и т. Д. Требуются байты, представляющие имена, и выполняется попытка проанализировать их по возрасту..

0 голосов
/ 31 января 2019

Предполагая, что ваш формат текста следующий.

  name1
  age1
  name2
  age2  

В этом случае вам нужно.

  while((fread((char *)&NAME, sizeof(struct clientName), 1, fp))==1 &&
           (fread((char *)&AGE, sizeof(struct clientAge), 1, fp))==1){
             printf("%s", NAME.name);    
             printf("\t\t%d", AGE.age);
     }
...