【发布时间】:2016-07-06 23:34:17
【问题描述】:
我尝试使用 Eclipse IDE 和 GDB 调试器调试需要用户输入的 C 程序。每次我在控制台中输入用户输入时,我的输入都会显示两次。换句话说,我的输入与相同的值相呼应。例如,如果我调试以下 C 程序:
#include <stdio.h>
int main(void) {
int length, width, height;
printf("Enter length: ");
scanf("%d", &length);
printf("Enter width: ");
scanf("%d", &width);
printf("Enter height: ");
scanf("%d", &height);
printf("Volume = %d\n", length*width*height);
return 0;
}
,那么控制台将如下所示:
Enter length: 2
2
Enter width: 3
3
Enter height: 4
4
Volume = 24
.
如您所见,值 2、3 和 4 分别显示了两次。运行这个程序(而不是调试)会得到预期的结果:
Enter length: 2
Enter width: 3
Enter height: 4
Volume = 24
另外,我注意到printf() 语句的执行有延迟:虽然我已经点击了“跳过”,但控制台中没有任何显示。为了让这个问题更明显,让我们将代码更改为:
#include <stdio.h>
int main(void) {
int length, width, height;
printf("Enter length: ");
printf("Enter length: "); // newly added line
printf("Enter length: "); // newly added line
scanf("%d", &length);
printf("Enter width: ");
scanf("%d", &width);
printf("Enter height: ");
scanf("%d", &height);
printf("Volume = %d\n", length*width*height);
return 0;
}
在这种情况下,字符串“输入长度:输入长度:输入长度:”将在我跨过第 9 行后一次性显示:scanf("%d", &length);。但是,如果我每次调用printf()时在末尾添加一个换行符'\n',那么就没有问题,字符串会立即打印到控制台。
我知道这两个问题是微不足道的,但作为强迫症,我真的很想知道这里发生了什么。我想这与 Eclipse 如何处理输入和输出有关?但话又说回来,我在 Eclipse 中调试 java 程序时没有看到这些问题。
PS。我在 Mac OS X El Capitan、面向 C/C++ 开发人员的 Eclipse (Mars) IDE 上运行,并根据此处给出的说明安装了带有 Homebrew 的 GDB:http://ntraft.com/installing-gdb-on-os-x-mavericks/。
提前感谢您的回答。
【问题讨论】:
-
尝试更好的 IDE:JetBrains 的 CLion。我不明白为什么有人使用 Eclipse。
-
@duffymo:因为它是免费的? :) 我使用 Eclipse for java,所以我尝试了他们的 C/C++ 版本。我实际上使用 C/C++ 的 Sublime Text 之类的文本编辑器..
-
这是我使用它的唯一原因。很高兴我学到了更好的东西。
-
如果你在mac上,你不能使用x-code吗?否则,请查看 Qt creator。
-
在运行配置窗口中,是否有一个标记为将进程输入和输出连接到终端的复选框?检查了吗?