【发布时间】:2020-03-13 22:19:08
【问题描述】:
我遇到了这种奇怪的情况,我无法解决。在下面的代码中,程序显然进入了无限循环,但不执行之前的代码。
#include <stdio.h>
#include <stdlib.h>
int main() {
char buf[100];
if (scanf("%s", buf)==EOF) return 0;
printf("This does not get printed");
while(1) {} //infinite loop
return 1;
}
不知何故,即使在按下enter 或使用Ctrl-d 之后,printf 命令也不会执行。
但是,似乎代码最终会陷入无限循环。
有人解释这里发生了什么吗?我正在使用 gcc。
【问题讨论】:
-
在末尾添加“\n”,然后重试。
-
它不会停止早期的代码,它会停止清除标准输出缓冲区的退出时清理代码。
-
另外,如果你用优化编译,编译器可能会交换语句的位置,只要它们不相互影响。
-
该死!有了额外的“\n”,我真的在我的屏幕上得到了这条线。显然新行会刷新标准输出缓冲区?
-
输出被缓冲。如果您不想等待,只需在
printf之后调用fflush(stdout),这将导致标准输出被刷新,并且 printf 的结果将立即出现。
标签: c infinite-loop