嘿,这一切都是我的代码
void Student::studentMenu() {
int choiceInput;
const string ErrorMsg;
cout << "-------------Student Menu--------------" << endl;
cout << "(1)Start Quiz" << endl;
cout << "(2)View History Score Table" << endl;
cout << "(0)Exit" << endl;
cout << "Option: " << endl;
try {
cin >> choiceInput;
if (choiceInput < 0 || choiceInput>2 || !cin)
{
throw (ErrorMsg);
}
while (choiceInput != 0) {
switch (choiceInput) {
case 1:
generateQuiz();
break;
case 2:
break;
case 0:
break;
}
break;
}
}
catch (string msg)
{
cout << "Please only enter valid integer from 0-3" << endl;
Student::studentMenu();
}
}
基本上它检查用户输入并在其非整数大于3时抛出异常。显示错误消息后,它应重定向回学生菜单()页面。当我输入一个像5这样的整数但是当我输入一个字符'f'时它会保持循环错误信息
请帮助我谢谢!
答案 0 :(得分:3)
cin >> choiceInput;
当输入不是可解析的整数时会发生什么,cin不会自动跳过它。这意味着你会陷入这个价值:你尝试阅读它,它失败了,你进行了一次迭代,你尝试阅读它,失败等等。要解决这个问题,你应该ignore错误的字符如果读取失败(例如!cin
返回true)。通常,这看起来像这样:
if (!cin) {
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} //proceed
(cin.clear()
需要清除failbit
,以便!cin
再次变为假“
答案 1 :(得分:0)
您需要使用无效值初始化choiceInput
变量:
int choiceInput = -1;
并且在使用cout.flush()
时请确保在调用studentMenu()
之前清理缓冲区:
catch (string msg)
{
cout << "Please only enter valid integer from 0-3: " << choiceInput << endl;
cout.flush();
}
答案 2 :(得分:0)
choiceInput是一个整数,'f'的ascii值是102,>&gt; 2.我建议你在choiceInput上添加一些检查以确保它是整数而不是字符。
见