2010-04-30 239 views
0

我有一段时间执行的代码(fscanf!= EOF)循环。 但是,即使fscanf执行完毕,我仍需要继续运行该代码,直到满足某些条件。 我的意思是我想我可以将代码复制/粘贴到while(fscanf)循环之外,并且只使用全局变量,但似乎很麻烦。当然有人遇到过这样的事情,并有一个更清洁的解决方案。如何确定,“while(fscanf!= EOF){blah}”中,如果下一个fscanf要返回EOF?

回答

5

难道你只是修改while条件来说明这些附加条件?

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

哈哈。天色已晚。 编辑:实际上,有一些代码我不想在EOF达到时执行。 我想我必须把它分开。 – paIncrease 2010-04-30 09:28:00

1

你不能 - FEOF的()函数只针对文件条件一个读操作后,终端的测试 - 没有测试,如果接下来的操作将失败的方式。您需要更改程序的逻辑,因为C流I/O不直接支持您要求的内容。

1

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

你的问题的答案或多或少是安德烈亚斯布林克写的。我有一种感觉,你可能需要更多的东西像这虽然:

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