我正在尝试使用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: "
,所以它的工作方式就像我认为它应该有效,但我不认为这是正确的方法运行程序。
答案 0 :(得分:0)
stdio
个流被缓冲。如果希望在程序阻塞等待输入之前显示输出,则在使用stdin之前需要fflush()
stdout。或者,您可以使用'\n'
结束所有输出行,因为换行符会隐式刷新输出
修改:如果您输入scanf()
使用%d
无法匹配的数据,例如字母字符,则scanf()
将失败。您可以通过将scanf()
的返回值与您预期的匹配数(本例中为一个)进行比较来检查此失败。按照目前的情况,你不检查这个,并且字符留在输入缓冲区中,下一个scanf()
将再次尝试并且无法匹配它们。