考虑以下程序。 我想知道为什么这些代码以不同的方式表现。提前谢谢你。
这不会打印任何内容
#include <stdio.h>
int main() {
int i = 0;
while(i < 10) {
if(i < 7)
printf("value is%d", i++);
}
}
虽然这样
#include <stdio.h>
int main() {
int i = 0;
while(i < 10) {
if(i < 7)
printf("value is%d\n", i++);
}
}
最佳答案
首先请注意,您的两个程序都不会退出。当 i
达到 7
时,游戏就结束了,您将永远无所事事。
第二个注意,唯一的区别是打印一个新行。那应该是你的线索。由于循环是无限的,因此您永远不会打印新行或退出 - 两者都会刷新 STDOUT。在刷新 STDOUT 之前,您只是在缓冲区中累积要打印的内容。只有冲洗才能将其显示在屏幕上,并清理缓冲区。
@chux 补充了一点:
STDOUT(或 IN 或 ERR)的缓冲是实现定义的,这意味着不同风格的 Linux、Windows 等可能会显示不同的行为。显然在 OP 中 STDOUT 被缓冲 - 因为没有输出出现。
关于c - while 中的 if 语句依赖于 while 依赖的同一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44918835/