我只是想知道当我多次输入 case 语句时如何阻止我的代码进入无限循环。例如,如果我输入“aaaa”而不是“a”,则会发生无限循环。
vector <int> vec {};
char choice {};
do{
cout << endl << "A - Add number to the list" << endl;
cout << "================================" << endl;
cin >> choice;
switch(choice){
case 'a':
case 'A':
{
int int_to_add {};
cout << "Enter the integer you wish to add: ";
cin >> int_to_add;
vec.push_back(int_to_add);
cout << endl << "Adding " << int_to_add << " to the list." << endl;
break;
}
}
当我尝试使用其他情况时,它不会开始循环,它仅执行我输入该情况的次数。
大概对于您的其他情况,您输入类似
bbbb
的内容,然后 cin >> choice;
结果为 choice = 'b'
并且 bbb
留在 cin
输入缓冲区中。循环的下一次迭代会提取下一个 b
,并重复此操作,直到所有内容都被消耗掉。
当您键入
aaaa
到达 case 'a':
时,行为会以相同的方式开始,choice = 'a'
和 aaa
留在输入缓冲区中。然后你就到达了cin >> int_to_add;
线。由于 aaa
不是有效数字,因此会设置 cin.fail()
。失败标志是粘性的,因此当循环迭代并到达 cin >> choice
且缓冲区中有 aaa
时,由于失败标志而失败,剩余的 aaa
永远不会被消耗,并且您的程序将永远循环。
在每个循环的顶部,您应该使用
cin.clear()
擦除上一次迭代期间发生的任何失败标志。
但是您也不应该期望
aaaa
是执行 a
四次的有效输入,因为 case 'a':
需要在 a
之后有一个数字。