[Ubuntu-zh] 回复: feof的问题

6 views
Skip to first unread message

Hoxily

unread,
Mar 16, 2012, 5:40:41 AM3/16/12
to ubuntu-zh mailing lists
上C语言课时,我的老师李强强调,
feof函数的正确使用方法是先尝试读取数据,然后用feof判断是否结束.
比如如下代码片段:
char c;
c = fgetc(fp);
while(!feof(fp))
{
printf("%X/n", c);
c = fgetc(fp);
}

参考链接:http://www.cnblogs.com/chenyadong/archive/2012/03/06/2382628.html
------------------
Hoxily:世界是合理的简单的因而是可以理解的。






------------------ 原始邮件 ------------------
发件人: "吴亚杰"<yaji...@hotmail.com>;
发送时间: 2012年3月16日(星期五) 下午5:24
收件人: "ubuntu-zh"<ubun...@lists.ubuntu.com>;

主题: [Ubuntu-zh] feof的问题



在用feof判断文件是否结束的时候总会多出一行:
下面的代码运行的结果总是 最后一行被读取了两次。
whie(!feof(fp)){
fscanf(fp,“%d”,&data);
}
fp指向的文件中存放如下的内容:
1122334455
运行上面的代码,55总是被读取了两次。这是为什么?feof在判断文件结束时返回非零值,不是应该退出while嘛?

-------------- 下一部分 --------------
一个HTML附件被移除...
URL: <https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20120316/7e541eec/attachment.html>
--
ubuntu-zh mailing list
ubun...@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: <https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20120316/bf74f0ce/attachment.html>
--
ubuntu-zh mailing list
ubun...@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh

吴亚杰

unread,
Mar 16, 2012, 8:21:36 AM3/16/12
to ubun...@lists.ubuntu.com

恩 问题已经解决了~~
确实是要先读取数据

URL: <https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20120316/e94dc616/attachment.html>

Earthson

unread,
Mar 16, 2012, 9:46:50 PM3/16/12
to ubuntu-zh mailing lists
我记得scanf有EOF的返回的(如果读取到文件尾的话)。当然,我觉得fscanf也应该有。
以前acm的时候总是这么写的
while(scanf(..., ...) != EOF) {
...

--

Perfection is achieved
not when there is nothing more to add
but when there is nothing left to take away
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: <https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20120317/1eb54d8b/attachment.html>

Reply all
Reply to author
Forward
0 new messages