printf的不打印在控制台上(printf not printing on console)

2019-06-18 15:07发布

我开始使用C语言。 我使用的Eclipse(JUNO)作为我的IDE和安装CDT插件。 我也将解压缩mingw64(GCC编译)。 我写了一个非常简单的程序,看看它是否工作。 这是我的代码:

#include <stdio.h>

int main()
{
    int age;
    printf("Hello, please enter your age:\n");
    scanf("%d", &age);
    printf("Your age is %d", age);
    return 0;
}

问题是,输出缓冲区充满了第一的字符串值printf但不输出到控制台。 我必须输入一个数字,然后才缓存中的所有数据倒到控制台,所以我看到控制台是这样的:

1
Hello, please enter your age:
Your age is 1

而不是什么预期是:

Hello, please enter your age:
1
Your age is 1

现在,我发现我可以使用fflush(stdout)后的第一个printf ,但我不认为这个解决方案是优雅的,甚至是必要。 我如何能解决这个任何想法?

编辑 -因为我正在学习这在我的大学,我不能使用任何没有在课程中所学,所以我只能printfscanf

新的编辑 -我想我已经找到了这种解释。 正如我所说的,我要输出在Eclipse控制台视图。 奇怪的是,如果我编译和从Windows的命令行中运行该程序时,我得到了想要的结果。 因此,我认为日食实际上是写输出到一个文件,并在控制台窗口中呈现它。 我如何可以强制Eclipse在我跑的配置,打开一个真正的命令行窗口?

Answer 1:

输出缓冲。

标准输出被默认,这意味着“\ n”为应该刷新缓冲区行缓冲。 为什么不是你的情况发生? 不知道。 需要了解你的应用/环境的详细信息。

但是,您可以控制与调用setvbuf()的缓冲:

setvbuf(stdout, NULL, _IOLBF, 0);

这将迫使标准输出为行缓冲。

setvbuf(stdout, NULL, _IONBF, 0);

这将迫使标准输出是无缓冲,这样你就不会需要使用fflush()。 请注意,它会严重影响应用程序的性能,如果你有大量的打印。



Answer 2:

显然,这是Eclipse中的一个已知的bug。 此错误与WONT-FIX的决议决定。 我不知道为什么,虽然。 这里是链接: Eclipse的。c控制台的Bug 。



Answer 3:

尝试设置这样在打印之前:

setvbuf (stdout, NULL, _IONBF, 0);


Answer 4:

你可以尝试写入标准错误,而不是标准输出。

fprintf(stderr, "Hello, please enter your age\n");

你也应该看看这个相关的线程。



Answer 5:

正如其他人所指出的那样,输出可以在程序中控制台前缓冲或外壳有机会看到它。

在类Unix系统,包括苹果电脑, stdout默认有基于行的缓冲。 这意味着你的程序清空其stdout ,只要它看到一个新行缓冲。

然而,在Windows,换行符不再是特殊的,并且使用全缓冲。 Windows不支持在所有行缓冲; 看到上调用setvbuf的MSDN页面 。

所以在Windows上,一个好的方法是完全关闭stdout缓存,如下所示:

setvbuf (stdout, NULL, _IONBF, 0);


Answer 6:

添加c:\gygwin\binPATH环境变量,无论是作为一个系统环境变量或Eclipse项目(属性- >运行/调试- >编辑)



Answer 7:

  1. 在项目文件夹中,创建一个“.gdbinit”的文本文件。 它将包含您的gdb调试器配置
  2. 编辑“.gdbinit”,并添加行(不带引号):“设置新的控制台”
  3. 建设项目后右键单击该项目调试>“调试配置”,如下图所示

  4. 在“调试”选项卡上,确保“GDB命令文件”现在指向你的“.gdbinit”文件。 否则,输入路径到“.gdbinit”配置文件:

  5. 点击“应用”和“调试”。 原生DOS命令行应该启动如下所示



文章来源: printf not printing on console