#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 =”。但是当我在DEV-C ++或VS 2017这样的另一个IDE中运行它时,它运行良好。当在printf之后添加这一行时,我就像我预期的那样运行。
fflush(stdout);
这是什么问题?
答案 0 :(得分:3)
printf
不会打印到屏幕看起来你的流是缓冲的。写入stdout
和其他流的数据将被缓冲,并在刷新缓冲区后输出所有数据。这样可以提高性能,因为IO在所有CPU操作中都是最慢的。
此时,您至少有以下选项:
fflush( stdout )
printf
来显式刷新缓冲区
setbuf(stdout, NULL);
\n
字符串Ex:printf
printf("n= \n");
来刷新缓冲区
醇>
您的代码在某些环境中有效,可能是因为在那里禁用了缓冲。