多次插入一个案例时重复do/switch语句[已关闭]

问题描述 投票:0回答:1

我只是想知道当我多次输入 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;
              }

        }

当我尝试使用其他情况时,它不会开始循环,它仅执行我输入该情况的次数。

c++ switch-statement case infinite-loop
1个回答
-1
投票

大概对于您的其他情况,您输入类似

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
之后有一个数字。

© www.soinside.com 2019 - 2024. All rights reserved.