如何一起fread()2结构C

时间:2019-01-31 10:15:51

标签: c file-handling

如何在1行中显示2条fread()语句。

这是我的代码的一部分:

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 :(得分:3)

假设您的文本格式如下。

what_a_nice_day_it_is_today.txt

在这种情况下,您需要的是

  name1
  age1
  name2
  age2  

答案 1 :(得分:1)

转动

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

进入

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

否则,由于循环未完成,因此您将读取clientName,然后多次读取clientAge,因为while会进行迭代。当然,解析将是无效的,因为您的文件包含名称,年龄,名称,年龄等数据。因此,尝试将文件解析为名称,年龄,年龄,年龄等。使用表示名称的字节并将其解析为年龄