c语言,从文本文件中读取数据到结构体数组,读不到最后一行是什么问题

#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructevent{intp;intd;cha... #include <stdio.h>#include <stdlib.h>#include <string.h>

typedef struct event{ int p; int d; char name[20];}event;int main(){ int i=0; event eve[4]; FILE *fp; fp=fopen("D:\\test4.txt","r"); if (fp ==0) { printf("file erro!\n"); exit(1); } fscanf(fp,"%d%d%s",&eve[i].p,&eve[i].d,&eve[i].name); while(fgetc(fp)!=EOF) { printf("%d %d %s\n",eve[i].p,eve[i].d,eve[i].name); i++; fscanf(fp,"%d%d%s",&eve[i].p,&eve[i].d,&eve[i].name); } fclose(fp); return 0;
}
展开
 我来答
keyuth
2016-08-30 · TA获得超过825个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:82万
展开全部

不是读不到,而是读完最后一行后,即跳出了循环,没有打印,所以,只需要在while(){}后面添加一行,如:

.....
while(fgetc(fp)!=EOF) 
{  
    printf("%d %d %s\n",eve[i].p,eve[i].d,eve[i].name); i++;  
    fscanf(fp,"%d%d%s",&eve[i].p,&eve[i].d,&eve[i].name);  
}
printf("%d %d %s\n",eve[i].p,eve[i].d,eve[i].name);
.....

就可以打印出来了。

把代码改成如下:

.....
fscanf(fp,"%d%d%s",&eve[i].p,&eve[i].d,&eve[i].name);
printf("%d %d %s\n",eve[i].p,eve[i].d,eve[i].name);
while(fgetc(fp)!=EOF) 
{  
    i++;  
    fscanf(fp,"%d%d%s",&eve[i].p,&eve[i].d,&eve[i].name);  
    printf("%d %d %s\n",eve[i].p,eve[i].d,eve[i].name);
}
.....

应该也行

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式