命令提示强制关闭

时间:2014-09-26 12:53:44

标签: c getchar

我是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;
}

2 个答案:

答案 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()等待输入。