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

thi*_*nnt 1 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;
}
Run Code Online (Sandbox Code Playgroud)

我在 eclipse c/c++ 中运行它,它不首先打印“n=”。但是当我在另一个 IDE(例如 DEV-C++ 或 VS 2017)中运行它时,它运行良好。当在 printf 之后添加这一行时,我按照我的预期运行了。

fflush(stdout);
Run Code Online (Sandbox Code Playgroud)

这里有什么问题 ?

Ara*_*ggu 6

printf除非刷新缓冲区,否则不会打印到屏幕

看起来您的流已被缓冲。一旦刷新缓冲区,您写入的数据stdout和其他流就会被缓冲并输出所有数据。这可以实现更好的性能,因为 IO 在所有 CPU 操作中是最慢的。

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

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

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