首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么将fscanf与: while( !feof(File))一起使用两次

为什么将fscanf与: while( !feof(File))一起使用两次
EN

Stack Overflow用户
提问于 2012-06-20 20:49:07
回答 3查看 2.2K关注 0票数 1

为什么使用fscanf从文件中获取数据时,会使用两次,一次是在"!feof(fin)“之前,一次是在后面,如以下代码所示:

代码语言:javascript
复制
fscanf(fin, "%s", letta);
while(!feof(fin)){

    fscanf(fin, "%s", letta);
}

读的词不是一样的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-20 20:51:03

不,读取的单词不会相同,因为您从文件中读取了两次,每次都会得到不同的数据。

while中的条件测试您是否在文件末尾,为此必须进行读取尝试,这需要在循环之前使用fscanf()

进入循环后,您希望继续从文件中读取数据。大概在循环中会有更多的代码来处理您正在读取的数据。

在您发布的代码中,如果您在第一次读取尝试时遇到文件末尾,则不会进入(while)循环。

这与测试位于循环底部的do-while构造形成对比(即读取只发生一次,在循环的“底部”)。在那里,您将始终至少进入循环一次。

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 20:57:53

在这里使用这样的feof()可能没有意义,但是许多正在学习C的人(我想,如果我弄错了,很抱歉)似乎“想要”。

事实上,fscanf()本身有一个返回值;如果文件结束,它将无法执行请求的扫描,并且它会告诉您。如果文件结束,它甚至会返回特殊常量EOF。所以只需循环fscanf()的返回值

代码语言:javascript
复制
while( fscanf(fin, "%s", letta) == 1 )
{
   /* Process, parse, store or do whatever with letta. */
}
票数 1
EN

Stack Overflow用户

发布于 2012-06-20 20:59:28

因为EOF标志仅在调用fscanf之后设置。当还没有调用fscanf时,条件while(!feof(fin))就没有意义了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11119942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档