【问题标题】:printf not print on the console in eclipse?printf 不在 Eclipse 的控制台上打印?
【发布时间】:2022-01-08 10:10:16
【问题描述】:
#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);

这里有什么问题?

【问题讨论】:

  • 没有C/C++语言!代码看起来像 C,那么为什么要向 C++ 标签发送垃圾邮件呢?你没有找到什么?已经有很多重复了!
  • Eclipse 控制台通常需要签名邀请才能刷新。
  • 为什么不把"n= " 放在scanfitself 中?

标签: c eclipse


【解决方案1】:

printf 不会打印到屏幕除非缓冲区被刷新

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

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

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

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

【讨论】:

  • 这段代码:printf("n= \n");对我不起作用。当我们刷新标准输出缓冲区时。数据传输到标准输出?
  • @NguyễnTiếnThiên 你的意思是说printf("n= \n"); 没有打印出来,或者它会让你的输入换行并且你不喜欢它?
  • @JonathanLeffler 谢谢。我认为一些编译器允许scanf 打印到stdout。但正如我所见,scanf 并不是要这样做。所以我删除了这个建议。是的,%s 是一个错字。谢谢:)