我是C的新手。我在Visual Studio Express Dekstop 2014版中键入了以下代码,但输出在命令提示符下强制关闭。我试图添加getchar();
不是一次不是两次,而是三次,但没有任何变化。我还尝试更改Project中的设置 - >属性 - >链接器 - >系统 - >子系统 - >控制台(/ SUBSYSTEM:CONSOLE)但现在输出显示在"没有调试器模式"但在"模式调试器"仍然输出在命令提示符下关闭。我还尝试在system("pause");
语句之前使用return 0;
。命令提示符关闭的唯一方法是通过按F9键在return 0;
语句处应用断点。
在这种情况下我该怎么办?
#include <string.h> // for strlen() prototype
#define DENSITY 62.4 // human density in lbs per cu ft
int main()
{
float weight, volume;
int size, letters;
char name[40]; // name is an array of 40 chars
printf("Hi! What's your first name?\n");
scanf_s("%s", name);
printf("%s, what's your weight in pounds?\n", name);
scanf_s("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volume is %2.2f cubic feet.\n",
name, volume);
printf("Also, your first name has %d letters,\n",
letters);
printf("and we have %d bytes to store it.\n", size);
getchar();
getchar();
return 0;
}
答案 0 :(得分:4)
通常情况下,“调试器模式打开”( F5 ,它具有更长的启动和关闭时间并且速度更慢),您实际上是......调试并且您可能在您的设置中设置了断点程序,只需在return 0;
语句中添加一个。
“没有调试器模式”( CTRL + F5 )Visual Studio将保持console application窗口打开,直到您按下按钮。
这是有道理的。
在您的情况下,问题是输入缓冲区中还剩下字符。
当然有很多解决方法:
_getch()
(来自#include <conio.h>
)这是非标准的system("pause")
这也不便携,当你在墙上有一个非常好的恒温器时,它有点像烧热你的家具while (getchar() != '.');
答案 1 :(得分:1)
对于它的价值,在Mac OSX上它运行良好。要让程序退出,我必须返回一次。所以,第一个getchar()已经有了一些东西可以选择...一个流浪\ n也许吧。
getchar()不必等待输入,因为它已经存在,而不是从之前的scanf语句中获取。
由于您在Microsoft上运营,可能会有一个\ r \ n坐在stdin中。所以你用每个getchar()来挑选它们。尝试再调用getchar()几次,你会明白我的意思。
代码对我有用的原因是unix-y环境只使用\ n,所以第一个getchar()选择了它,下一个getchar()等待输入。