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