【问题标题】:Eclipse C/C++ Console behaving strangelyEclipse C/C++ 控制台行为异常
【发布时间】:2013-10-01 11:04:20
【问题描述】:

我打算将 Eclipse 与 MinGW 一起使用。但在所有设置完成后,我得到了这个奇怪的错误。那么它实际上不是一个错误。我认为它是一个错误。在编写程序并构建它之后,当我

运行它,控制台仍然没有响应。它可以工作,但像这样-----

假设我正在运行这段代码 --

#include<stdio.h>
int main() {
    int a, b, c;
    printf("Enter two numbers\n");
    scanf("%d %d", &a, &b);
    c = a+b;
    printf("%d", c);
    return 0;
}

运行程序后,控制台出现如下--

当我第一次运行这个程序时,似乎是在所有 scanf() 语句都完成之后,printf() 语句正在执行。现在,如果在每个printf() 之后添加一个fflush(stdout),这个问题很快就解决了。但是在配置和设置方面应该有一些解决方案,添加fflush(stdout) 对我来说看起来不是很舒服,想象一下它在一个有 10 个或更多选项的菜单驱动程序中。那么我还有什么可以做的吗?

我已经试过了。

" Project -&gt; Properties -&gt; Run/Debug Settings -&gt; 选择.exe 并单击edit -&gt; 转到选项Environment 并选择new 并给出Name = PATHValue = C:\MinGW\bin"

但遗憾的是它没有用。

【问题讨论】:

    标签: c++ c eclipse configuration


    【解决方案1】:

    stdout 流是缓冲的,因此只有在到达换行符后才会显示缓冲区中的内容。

    在每个printf 语句中使用\n

    或寻求fflush的帮助,

    或尝试使用setbuf(stdout, NULL);setbuf 将禁用缓冲,

    setvbuf (stdout, NULL, _IONBF, BUFSIZ); 也可以,但您需要在对stdout 进行任何操作之前调用它,

    或使用stderr 打印而不是stdout

    【讨论】:

    • 如您所见,我在每个 printf 语句中都使用了“\n”。 setvbuf (stdout, NULL, _IONBF, BUFSIZ) 工作正常。你能解释一下为什么会这样吗?当我在命令行中使用 MinGW 或使用任何其他 IDE(如 code::blocks 或 VC++)时,不会发生这种情况。
    • @allocated 终端是行缓冲的,这就是为什么您对此没有任何问题,不,我看不出您已将 \n 与 line ` printf("%d", c );`
    • 糟糕!我错过了那个。感谢您的帮助。
    【解决方案2】:

    您还可以将 Eclipse 配置为使用外部本地 DOS 控制台进行调试,这将解决您的所有问题。 该过程详细描述here,但简要:

    1. 从 Eclipse 菜单文件 > 新建 > C++ 项目中创建您的 Hello World C++ 命令行项目
    2. 在您的项目文件夹中,创建一个“.gdbinit”文本文件。它将包含您的 gdb 调试器配置
    3. 编辑“.gdbinit”,并添加以下行(不带引号):“set new-console on”
    4. 在 Eclipse 中,转到菜单 Run > “Debug Configurations”,然后在左侧窗格中选择您的应用程序名称
    5. 在“调试器”选项卡中,确保“GDB 命令文件”现在指向您的 « .gdbinit » 文件。否则,输入“.gdbinit”配置文件的路径
    6. 单击«应用»和«调试»。你完成了 !应启动本机 DOS 命令行。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      相关资源
      最近更新 更多