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,要不然你用走不出去。