int main() { int num; cout<<"请输入题号:" << endl; while(1) { cin>> num; cout<<num<<endl; if(num >= 1 && num <= 4) break; cout<< "没有这道题,重新输入:" << endl; //当本人输入9.9或其他小数时,程序会一直输出“没有这道题,重新输入:”这句话。 //哪位高手能指点一下? } switch (num) { case 1: punish();break; case 2: day();break; case 3: triangle();break; case 4: sort();break; } return 0; }
解决方案:25分
当cin尝试将输入的double型数字读为int型数据失败后,会产生一个错误状态–cin.fail().而要用cin读取输入流中的数据,输入流必须处于无错误状态。因此,由于错误状态的存在,会一直执行while循环。
LZ可以在cin>>num;下面加一句就知道输入缓冲区中还剩下啥了
(num会读取double的整数部分(还留下小数点和小数点后的数字,假如是1到5之间的小数都能通过break跳出while循环)
LZ可以在cin>>num;下面加一句就知道输入缓冲区中还剩下啥了
(num会读取double的整数部分(还留下小数点和小数点后的数字,假如是1到5之间的小数都能通过break跳出while循环)
if ( std::cin.fail() ) { char error_str[32] = {0}; std::cin.clear(); std::cin >> error_str; std::cout << "fail,the input char is:" <<error_str << std::endl; }
解决方案:10分
原因是你的输入流已经破坏了
使用以下恢复:
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), “”\n””);
使用以下恢复:
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), “”\n””);
解决方案:5分
你输入浮点型数据,导致流发生错误,后续就读不成功,所以num就一直是 9