#include<stdio.h>
int main() {
int n, s, i;
do {
printf("n= "); // here is the problem ?
scanf("%d", &n);
} while (n<100 || n <= 0);
s = 0;
i = 0;
while (i <= n) {
i = i + 2;
s = s + i;
}
printf("s=%d", s);
getchar();
return 0;
}
我在 eclipse c/c++ 中运行它,它不首先打印“n=”。但是当我在另一个 IDE(例如 DEV-C++ 或 VS 2017)中运行它时,它运行良好。当在 printf 之后添加这一行时,我按照我的预期运行了。
fflush(stdout);
这里有什么问题 ?
printf
除非刷新缓冲区,否则不会打印到屏幕
看起来您的流已被缓冲。您写入的数据stdout
一旦您刷新缓冲区,其他流就会被缓冲和所有输出。这可以实现更好的性能,因为 IO 在所有 CPU 操作中是最慢的。
此时,您至少有以下选择:
- 通过调用显式刷新缓冲区
fflush( stdout )
每次你使用printf
- 禁用缓冲
setbuf(stdout, NULL);
- 使用换行符刷新缓冲区
\n
结束时printf
字符串例如:printf("n= \n");
您的代码在某些环境中工作可能是因为那里禁用了缓冲。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)