在NetBeans中运行程序时无法输入数据

时间:2015-02-04 21:47:15

标签: c netbeans printf

我正在尝试使用MinGW编译器从NetBeans 8.0.2中的K. N. King“C Programming,A Modern Approach,2 Edition”一书中执行一个程序。该计划如下:

#include <stdio.h>
int main(void) {
int height, length, width, volume, weight;

printf("Enter height of box: ");
scanf("%d", &height);
printf("Enter length of box: ");
scanf("%d", &length);
printf("Enter width of box: ");
scanf("%d", &width);
volume = height * length * width;
weight = (volume + 165) / 166;

printf("Volume (cubic inches): %d\n", volume);
printf("Dimensional weight (pounds): %d\n", weight);

return 0;
}

所以,我按“运行项目”,程序成功构建没有任何错误,然后它开始运行,没有任何反应,没有控制台或类似的东西似乎输入数据,如高度,长度等。

在输出窗口中,程序构建完成后,它开始运行,除了较粗的光标外,窗口中不显示任何内容。当我按下该窗口中的任何按钮时,程序结束,这就是显示的内容:

Enter height of box: Enter length of box: Enter width of box: Volume (cubic inches): 0 Dimensional weight (pounds): 0
RUN SUCCESSFUL (total time: 6s)

我对C完全不熟悉,所以我不知道程序运行时会出现什么。当启动用Python编写的程序时,控制台出现了,现在我很困惑。

当我尝试调试时,它再次成功构建,然后控制台出现了行"Enter height of box: ",所以它的工作方式就像我认为它应该有效,但我不认为这是正确的方法运行程序。

1 个答案:

答案 0 :(得分:0)

stdio个流被缓冲。如果希望在程序阻塞等待输入之前显示输出,则在使用stdin之前需要fflush() stdout。或者,您可以使用'\n'结束所有输出行,因为换行符会隐式刷新输出 修改:如果您输入scanf()使用%d无法匹配的数据,例如字母字符,则scanf()将失败。您可以通过将scanf()的返回值与您预期的匹配数(本例中为一个)进行比较来检查此失败。按照目前的情况,你不检查这个,并且字符留在输入缓冲区中,下一个scanf()将再次尝试并且无法匹配它们。