如何确定,在“内部”;而(fscanf!=EOF){blah}";,如果下一个fscanf将返回EOF?
我在一个while(fscanf!=EOF)循环中执行了一些代码。 然而,即使fscanf已经完成执行,我也需要继续运行该代码,直到满足某些条件。如何确定,在“内部”;而(fscanf!=EOF){blah}";,如果下一个fscanf将返回EOF?,c,loops,while-loop,eof,scanf,C,Loops,While Loop,Eof,Scanf,我在一个while(fscanf!=EOF)循环中执行了一些代码。 然而,即使fscanf已经完成执行,我也需要继续运行该代码,直到满足某些条件。 我的意思是,我想我可以将代码复制/粘贴到while(fscanf)循环之外,并且只使用全局变量,但这看起来很混乱。肯定有人以前遇到过类似的情况,并且有一个更干净的解决方案。您不能修改while条件来解释这些附加条件吗 while(fscanf(...) != EOF || !(some_other_conditions_met)) 不能-feof
我的意思是,我想我可以将代码复制/粘贴到while(fscanf)循环之外,并且只使用全局变量,但这看起来很混乱。肯定有人以前遇到过类似的情况,并且有一个更干净的解决方案。您不能修改
while
条件来解释这些附加条件吗
while(fscanf(...) != EOF || !(some_other_conditions_met))
不能-feof()函数只测试读取操作后的文件结束条件-无法测试下一个操作是否失败。您需要更改程序的逻辑,因为C流I/O不能直接支持您的要求。问题标题的答案是,这是不可能的。想象一下,获取一个随机数并决定要传递给fscanf的两个格式字符串中的哪一个。当你甚至不知道随机数是多少时,你想提前预测fscanf是否会得到eof 你问题主体的答案或多或少是安德烈亚斯·布林克写的。我觉得你可能需要更像这样的东西:
for (;;)
{
// .....
eofReached = (fscanf(..) == EOF);
// .....
if (eofReached && otherConditionsMet) break;
// .....
}
清洁剂解决方案避免使用
scanf
/fscanf
。一次读取一整行并用sscanf
解析该行的错误率要小得多
从comp.lang.c常见问题解答:
也是相关的。lol.时间不早了。编辑:事实上,有一些代码我不希望在达到EOF后执行。我想我得把它分开。