2017-06-20 160 views
-3

我已经查看了C++程序的类似问题,但即使在应用修复程序时,在输入我的值(“输入等级”)后我的命令窗口也会关闭。使用Visual Studio 2017.C++程序命令窗口在程序完成前关闭

#include <iostream> 

int main() 
{ 
    int grade =0; 
    std::cout << "Enter a grade (1-100): "; 
    std::cin >> grade; 

    if (grade >= 70) 
     std::cout << "\nPass\n"; 
    else 
     std::cout << "\nFail\n"; 
    std::cin.get(); 
    return 0; 
} 

此错误是否会导致它?

加载 'C:\ Program Files文件\诺顿360 \ NortonData \ 22.9.1.12 \定义\ BASHDefs \ 20170616.003 \ UMEngx86.dll'。 找不到或打开PDB文件。

我解决我的所有其他PDB文件错误,但不知道如何摆脱这一个,也不会知道它是什么导致了问题。我认为这些错误是新的,因为我安装了Visual Studio 2015以摆脱调试错误;我以前运行这个程序就好了。

+1

***无法找到或打开PDB文件***这是正常的/没有什么值得关注的。该消息告诉您,您的防病毒程序没有调试符号。除非你想调试你的AV,否则你不会需要它。 – drescherjm

回答

1

std::cin.get() >> grade;cin中读取一个字符,并将其右移grade中存储的值,即0,然后丢弃结果。将其更改为std::cin >> grade;,它会更好。

+0

我明白这一点。我会做出改变。不幸的是,它没有改变命令窗口的问题。 – britt

+0

在读入等级以删除缓冲区中的换行符后,添加'std :: cin.ignore();'。 –

0

有几个选项。通常当你有一个控制台程序时,你可以从一个已经运行的控制台运行它,所以你不需要暂停程序。该程序只是打印输出并退出,而您已经运行的控制台仍然保留。

要让您的控制台窗口在此处打开,您可以使用此功能暂停程序,直到用户按下Enter键。虽然我不会太频繁地使用它,但像这样大量地调用系统调用并不是一个好的编程习惯。 Why "system" is evil

system("pause"); 

你可以做的另一件事是编写一个循环,提示用户输入一个选项退出,就像这样。

char input; 

do { 
    std::cout << "Enter 'q' to exit" << std::endl; 
    std::cin >> input; 
} while (input != 'q'); 

这样,您的程序退出的唯一方法就是输入正确的输入。


这个例子很简单,但它的工作原理。当你需要验证用户输入时,例如验证用户输入的整数等,我创建一个缓冲区,将用户输入写入缓冲区,将输入与缓冲区进行比较,如果两者相同,则接受输入。如果你想使这个例子强一点,你可以确保用户只输入一个字符值,像这样:

do { 
    std::cout << "Enter 'q' to exit" << std::endl; 
    std::cin >> input; 

    if (std::cin.fail()) { 
     std::cin.clear(); // Clear the 'input fail' flag 
     std::cin.ignore(50, '\n'); 
    } 
} while (input != 'q'); 

这是确保在你的程序的容错能力更强大的方式。你可以查看这个问题的更多细节。 cin clear, ignore