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

个人的愚蠢做法,举例以示意while(ch!=EOF{fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,... 个人的愚蠢做法,举例以示意
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);
}
请指教...谢谢
展开
 我来答
休闲娱乐达人天际
高能答主

2020-05-12 · 致力于休闲娱乐知识的解答,分享娱乐知识。
休闲娱乐达人天际
采纳数:1605 获赞数:396536

向TA提问 私信TA
展开全部

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,因此常被用来判断调用一个函数是否成功。

文正153
推荐于2016-07-28 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:623万
展开全部
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.

stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GiraKoo
推荐于2018-04-25 · 还没有任何签名哦
GiraKoo
采纳数:3949 获赞数:11110

向TA提问 私信TA
展开全部
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;
追答
相互帮助嘛。满意请采纳
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
矮油我去___
2018-04-25
知道答主
回答量:1
采纳率:0%
帮助的人:870
引用刘文正粉丝的回答:
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.

stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
展开全部
应取下面的办法↓
fscanf返回值null的办法报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
堵丹彤牟萱
2019-09-17 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:29%
帮助的人:893万
展开全部
你可以用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
加载更多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式