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