如何让fscanf自动在文件读结束时候停止执行

来源:百度知道 编辑:UC知道 时间:2024/06/02 07:21:04
fscanf调用成功返回1,那么如何让它自己读文件,并且在文件内容读完时候不在读了??
程序: while(fscanf(fp,"%s%s%f",&(stu[i].id),&(stu[i].name),&(stu[i].avg)) && i<5)
i++;
上面是用i<5来做结束条件,曾经试过这样的:
while(fscanf(fp,"%s%s%f",&(stu[i].id),&(stu[i].name),&(stu[i].avg)))
i++;
本来想应该可以,但是程序执行的时候确出错,一直停留在循环,那么,如何让fscanf自动在文件读结束时候停止执行?

用 feof(fp) 判断 读到了文件结束符 EOF
数据量大的时候用此法保险。

while (!feof(fp)) {
if ( fscanf(fp...)==EOF ) break;
}

或:
while ( fscanf(fp,...) !=EOF ){}
数据量大的时候(成千上万行),不保险。

fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.
stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
即后面跟的不定参数.

检查文件是否结束,标志是EOF