程序完成之前,C ++程序命令窗口正在关闭

时间:2017-06-20 00:48:09

标签: c++ visual-studio-2015 visual-studio-2017

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

 #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 \ Norton 360 \ NortonData \ 22.9.1.12 \ Definitions \ BASHDefs \ 20170616.003 \ UMEngx86.dll'。   无法找到或打开PDB文件。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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');

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

这个例子非常简单,但它确实有效。当你需要验证用户输入时,比如验证用户输入的整数等,我创建一个缓冲区,将用户输入写入缓冲区,将输入与缓冲区进行比较,如果两者是等效的,则接受输入。如果你想让这个例子更强一些,你可以确保用户只输入一个char值:

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