
有四个结构体数据为什么只能打印出最后一个数据,不是不等于EOF才不读和打印吗?不循环,读一个打印一个倒是能打印打印所有的

下午好🌅🌅🌅
本答案参考ChatGPT-3.5
问题:有四个结构体数据为什么只能打印出最后一个数据?
原因:在代码中,使用了一个分号(;)将while循环的代码块和循环条件分开,导致循环体只执行了一次。之后程序遇到了fclose(pf)语句,强制关闭了文件,因此只输出了最后一条记录。
解决方案:
1.取消循环体后面的分号(;),让循环体正常执行。
2.将fclose(pf)放在while循环结束后,保证所有记录都被读取和输出后再关闭文件。
修改后的代码:
#include<stdio.h>
#include<stdlib.h>
struct mes{
char name[15];
char sex[5];
char phone[10];
}*me;
int main() {
int ch;
me=(struct mes*)malloc(sizeof(struct mes));
FILE*pf=fopen("text.txt","r");
if(pf==NULL)
return -1;
else {
while((ch=fscanf(pf,"%s %s %s",me->name,me->sex,me->phone))!=EOF) {
printf("%s %s %s\n ",me->name,me->sex,me->phone);
}
fclose(pf);
return 0;
}
}