printf不能在eclipse的控制台上打印?

时间:2017-05-21 16:01:37

标签: c eclipse

#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);

这是什么问题?

1 个答案:

答案 0 :(得分:3)

除非刷新缓冲区,否则

printf不会打印到屏幕

看起来你的流是缓冲的。写入stdout和其他流的数据将被缓冲,并在刷新缓冲区后输出所有数据。这样可以提高性能,因为IO在所有CPU操作中都是最慢的。

此时,您至少有以下选项:

  1. 每次使用fflush( stdout )
  2. 时,都会通过调用printf来显式刷新缓冲区
  3. 禁用缓冲setbuf(stdout, NULL);
  4. \n字符串Ex:printf
  5. 末尾使用换行符printf("n= \n");来刷新缓冲区

    您的代码在某些环境中有效,可能是因为在那里禁用了缓冲。