2014-09-26 112 views
4

我是C的新手。我在Visual Studio Express Dekstop 2014版中键入以下代码,但输出在命令提示符下强制关闭。我试图添加getchar();不是一次两次,而是三次也没有改变。我也尝试更改Project - > Properties - > Linker - > System - > Sub System - > Console(/ SUBSYSTEM:CONSOLE)中的设置,但现在输出显示为“没有调试器模式”,但是在“调试器模式”仍然输出在命令提示符下关闭。我还试图在return 0;声明前使用system("pause");。命令提示符不关闭的唯一方法是通过按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

在每次调用'scanf_s'之前在提示中添加一个空格并再次检查。 – usr2564301 2014-09-26 13:10:49

+1

创建一个可执行文件并从终端运行它。 – 2014-09-26 13:26:55

+2

我非常喜欢_not一次,不是两次,而是三次。人们不会那么写。 – Yann 2014-09-26 13:29:50

回答

4

通常情况下,用(F5具有更长的启动和关机时间,慢)“在调试模式”,你居然......调试,你可能在你的程序中设置断点并且可以简单地在return 0;声明中添加一个。

“如果没有调试模式”(CTRL + F5 )Visual Studio将保持console application窗口打开,直到你按下一个按钮。

这是有道理的。

在你的情况下,问题是在输入缓冲区中还有字符。

。当然,有很多解决方法:

  • 运行命令行程序(可能是最好的)
  • _getch()(从#include <conio.h>)这是非标准
  • system("pause")这个是不便携的,它有点像燃烧你的家具热量,当你有一个完美的好温控器在墙上
  • 东西like while (getchar() != '.');
+0

所以如果我只想运行程序Visual Studio,哪种方法最合适?我认为第四种选择是最好的。但我不知道如何使用它,你可以请一个小的基本的C示例代码,并把它放在这个“while”语句。顺便说一句,谢谢你的答案:) – Coldplay 2014-09-26 15:31:22

+0

我将“子系统”属性设置为“控制台(/ SUBSYSTEM:CONSOLE)”并启动程序而不进行调试(CTRL + F5)。 – manlio 2014-09-26 15:39:25

1

对于它的价值,在Mac OSX上它工作得很好。为了让程序退出,我不得不一次返回。所以,第一个getchar()已经有东西可以拿起......一个流浪\ n也许。

getchar()不需要等待输入,因为它已经存在,而没有从之前的scanf语句中拾取。

作为您在微软的操作系统,可能存在一个坐在stdin中的\ r \ n。所以你用每个getchar()来挑选它们。尝试再次调用getchar()几次,你会明白我的意思。

代码为我工作的原因是unix-y环境只使用\ n,所以第一个getchar()选择了它,下一个getchar()等待输入。