C语言 格式读取 fscanf() 如何读取至末尾结束(txt)

个人的愚蠢做法,举例以示意
while(ch!=EOF
{
fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,&tact[a].phone,&tact[a].note);
ch=fgetc(fp);
}
请指教...谢谢

fscanf是有返回值的。如果返回EOF,证明到达文件结尾

在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。 

扩展资料:

应用

档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。

C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-07-28
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.

stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
第2个回答  推荐于2018-04-25
fscanf是有返回值的。如果返回EOF,证明到达文件结尾追问

哈哈 谢谢你,尝试如下代码,读取成功!
while(fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,&tact[a].phone,&tact[a].note)!=EOF)
++a;

追答

相互帮助嘛。满意请采纳

本回答被提问者和网友采纳
第3个回答  2018-04-25
应取下面的办法↓
fscanf返回值null的办法报错
第4个回答  2019-09-17
你可以用fgets()按行读取内容到
字符串变量里,然后处理。
假如已读入到
str[80]
里:
char
str[80]="or2_x2
c401
(
.a1(n66),
.a2(n85),
.zn(n142)
)";
多行这样的文字格式,
如果位置固定,可以直接读出:
char
r[4][5];
sscanf(str,"%s",r[0]);
r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+18,"%s",r[1]);
r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+28,"%s",r[2]);
r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+38,"%s",r[3]);
r[3][4]='\0';printf("%s\n",r[3]);
------------------------
如果位置不固定,我们可以用查找
点号的位置加4:
int
i,j,l[3];
j=0;
for
(i=0;i
评论
0
0
0
加载更多
相似回答