我有一段时间执行的代码(fscanf!= EOF)循环。 但是,即使fscanf执行完毕,我仍需要继续运行该代码,直到满足某些条件。 我的意思是我想我可以将代码复制/粘贴到while(fscanf)循环之外,并且只使用全局变量,但似乎很麻烦。当然有人遇到过这样的事情,并有一个更清洁的解决方案。如何确定,“while(fscanf!= EOF){blah}”中,如果下一个fscanf要返回EOF?
0
A
回答
5
难道你只是修改while
条件来说明这些附加条件?
while(fscanf(...) != EOF || !(some_other_conditions_met))
1
你不能 - FEOF的()函数只针对文件条件一个读操作后,终端的测试 - 没有测试,如果接下来的操作将失败的方式。您需要更改程序的逻辑,因为C流I/O不直接支持您要求的内容。
1
您的问题的标题的答案是,它是相当不可能的。想象一下,获得一个随机数并决定将要传递给fscanf的两个格式字符串中的哪一个。当你甚至不知道随机数是什么时,你是否需要预测fscanf是否会得到eof?
你的问题的答案或多或少是安德烈亚斯布林克写的。我有一种感觉,你可能需要更多的东西像这虽然:
for (;;)
{
// .....
eofReached = (fscanf(..) == EOF);
// .....
if (eofReached && otherConditionsMet) break;
// .....
}
1
清洁解决方案,避免使用scanf
/fscanf
。它更不容易出错,一次只读一整行,而用sscanf
解析行。
从comp.lang.c常见问题:Why does everyone say not to use scanf? What should I use instead?
哈哈。天色已晚。 编辑:实际上,有一些代码我不想在EOF达到时执行。 我想我必须把它分开。 – paIncrease 2010-04-30 09:28:00