我已经查看了类似的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来摆脱调试错误;我以前运行这个程序就好了。
答案 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