【发布时间】:2021-11-29 22:32:34
【问题描述】:
int main() {
int choice;
while (true){
cout << "Enter choice: \n";
cin.clear();
cin >> choice;
switch(choice){
case 1:
cout << "you picked 1\n";
break;
case 2:
cout << "you picked 2\n";
break;
default:
cout << "invalid choice\n";
break;
}
}
}
大家好!你能帮我么?我制作了一个有多个选项可供选择的程序。问题是当我输入一个整数以外的东西时,它给了我一个无限循环。如何抛出错误并返回输入?
【问题讨论】:
-
了解 can.fail() 和 cin.clear()。
-
检查
cin的状态。喜欢if (cin >> choice) { switch (...) ... } else { /* Handle invalid input */ } -
为了更好地验证输入,将整行读入
std::string(例如std::getline),然后尝试解析该字符串。 -
cin 可以在 if (..) 条件内进行验证 - 它有一个隐式转换运算符,可以根据 last 返回 True/False上次操作是否成功。如果您尝试在 choice 中输入任何不是整数的其他内容 - cin 将评估为 false (if (cin >> choice) {...})。并且无论如何,您编写代码的方式总是会陷入无限循环。 break 会导致从 switch case 中退出,但是你是从 while 循环中中断的?
-
如果您输入的不是整数(例如字母
X),那么cin将被置于错误状态,并且违规字符将留在流缓冲区中。如果下一个操作尝试再次读取整数(就像在循环中所做的那样),那么将再次遇到有问题的字符(因此流保持错误状态并且字母保持在缓冲区中导致错误)。读取积分输入后,检查流状态(例如cin.fail()或!cin将测试为真)并清除它(例如cin.clear())。
标签: c++ loops switch-statement infinite-loop options