如果下一个fscanf将返回EOF,如何确定“while(fscanf!= EOF){blah}”内部?

时间:2010-04-30 08:43:11

标签: c loops while-loop eof scanf

我在一段时间内执行了一些代码(fscanf!= EOF)循环。 但是,即使fscanf执行完毕,我仍需要继续运行该代码,直到满足某些条件。 我的意思是我想我可以将代码复制/粘贴到while(fscanf)循环之外,并且只使用全局变量,但这看起来很混乱。当然有人之前遇到过这样的事情并且有一个更清洁的解决方案。

4 个答案:

答案 0 :(得分:5)

您是否只能修改while条件以解释这些附加条件?

while(fscanf(...) != EOF || !(some_other_conditions_met)) 

答案 1 :(得分:1)

你不能 - feof()函数只在读取操作后测试文件结束条件 - 没有办法测试下一个操作是否会失败。您需要更改程序的逻辑,因为C流I / O不直接支持您要求的内容。

答案 2 :(得分:1)

你问题的标题答案是,这很不可能。想象一下,获取一个随机数并决定将要传递给fscanf的两个格式字符串中的哪一个。当你甚至不知道随机数是什么时,你想要预先判断fscanf是否会得到eof?

你的问题正文的答案或多或少是安德烈亚斯布林克写的。我觉得你可能需要更像这样的东西:

for (;;)
{
  // .....
  eofReached = (fscanf(..) == EOF);
  // .....
  if (eofReached && otherConditionsMet) break;
  // .....
}

答案 3 :(得分:1)

清洁解决方案避免使用scanf / fscanf。一次读取整行并使用sscanf解析该行的错误要小得多。

来自comp.lang.c FAQ:Why does everyone say not to use scanf? What should I use instead?

The entry on feof usage也很重要。