Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定,在“内部”;而(fscanf!=EOF){blah}";,如果下一个fscanf将返回EOF?_C_Loops_While Loop_Eof_Scanf - Fatal编程技术网

如何确定,在“内部”;而(fscanf!=EOF){blah}";,如果下一个fscanf将返回EOF?

如何确定,在“内部”;而(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!=EOF)循环中执行了一些代码。 然而,即使fscanf已经完成执行,我也需要继续运行该代码,直到满足某些条件。
我的意思是,我想我可以将代码复制/粘贴到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后执行。我想我得把它分开。