switch语句求解

问题遇到的现象和发生背景

switch语句不按条件执行

问题相关代码,请勿粘贴截图
#include
using namespace std;

int main()
{
    while (true)
    {
        int select = 0;
        cin >> select;
        switch (select)
        {
        case 0:cout << 0 << endl; break;
        case 1:cout << 1 << endl; break;
        case 2:cout << 2 << endl; break;
        case 3:cout << 3 << endl; break;
        default:
            cout << "输入有误" << endl;
            break;
        }
    }
}

运行结果及报错内容

当输入字母时无限输出0

我的解答思路和尝试过的方法

尝试数字不符合条件时会执行default语句

我想要达到的结果

当输入字母时为什么不走default语句而无限执行case 0呢?

因为你select默认值为0
当输入字符时,select没有有效值输入,所以还是0
但由于输入缓存中的字符一直存在,所以后续的cin>>select就不需要你输入了。
一是将select默认值改为无效值。
二是在cin>>select后,清空输入缓冲区

因为你不按套路出牌,select是定义的整型,你却给他输入字母,你把default的break改为return,输入其他数字试试

因为你输入的没法转换成int,cin抛错了,但是数据滞留在了输入缓冲区里
导致再次执行cin时,它认为你已经输入过了,所以不会阻塞住等你再次输入
解决办法:
把select定义成char型,然后判断case '0'

int类型,不能定义字符,会出现乱码。
而且如果你想退出while你必须在switch外面还得有一个break,要不然你用走不出去。

这篇文章讲的很详细,请看:switch语句
同时,你还可以查看手册:c++-语句 中的内容