我有一些代码在 while(fscanf != EOF) 循环中执行。但是,即使 fscanf 完成执行,我也需要继续运行该代码,直到满足某些条件。我的意思是我想我可以将代码复制/粘贴到 while(fscanf) 循环之外,并且只使用全局变量,但这看起来很混乱。肯定有人以前遇到过这样的事情并且有一个更清洁的解决方案。
问问题
1777 次
4 回答
5
您不能只修改while
条件以考虑这些附加条件吗?
while(fscanf(...) != EOF || !(some_other_conditions_met))
于 2010-04-30T08:44:57.437 回答
1
您不能 - feof() 函数仅在读取操作后测试文件结束条件- 无法测试下一个操作是否会失败。您需要更改程序的逻辑,因为 C 流 I/O 不直接支持您的要求。
于 2010-04-30T08:47:46.073 回答
1
您的问题标题的答案是,这几乎是不可能的。想象一下,获取一个随机数并决定将两个格式字符串中的哪一个传递给 fscanf。当您甚至不知道随机数是什么时,您想要提前预测 fscanf 是否会得到 eof?
您问题主体的答案或多或少是 Andreas Brinck 所写的。我有一种感觉,你可能需要更多这样的东西:
for (;;)
{
// .....
eofReached = (fscanf(..) == EOF);
// .....
if (eofReached && otherConditionsMet) break;
// .....
}
于 2010-04-30T08:55:23.360 回答
1
更清洁的解决方案避免使用scanf
/ fscanf
。一次读取整行并用它解析行的错误要少得多sscanf
。
来自comp.lang.c FAQ:为什么大家都说不要使用scanf?我应该改用什么?
feof
用法条目也很重要。
于 2010-04-30T11:18:02.220 回答