我试图从用户那里得到一个整数,但如果他们输入“ckefkfek”,它将导致程序垃圾邮件和破坏。我也希望他们输入一个浮点数,但我得到了同样的问题,并且不知道如何检查这个。
int option = 0;
while (option != 3)
{
cout << "Enter 1, 2, or 3: ";
cin >> option;
switch (option)
{
case 1:
cout << "Enter a float: ";
float myfloat;
cin >> myfloat;
myFunc(myfloat); // must be a float for this function to work.
break;
case 2:
// do stuff
break;
case 3:
// do stuff
break;
default:
cout << endl << "Not a valid option." << endl;
break;
}
}
如何在没有持续错误的情况下执行此操作?谢谢!
答案 0 :(得分:5)
bool input_ok = false;
while (!input_ok)
{
cout << "Enter 1, 2, or 3: ";
if (cin >> option)
{
input_ok = true;
...
}
else
{
cout << "Stop being silly\n";
std::string dummy;
if (cin >> dummy)
cin.clear();
else
throw std::runtime_error("OK, I'm not playing any more");
}
}
基本上如果输入失败,您需要测试它是否失败。您可以通过使用cin >> option; if (cin) ...
读取流后检查流的状态,或者将读取和测试结合起来来测试,if (cin >> option) ...
如果输入失败,请阅读无法解析为整数的内容并将其丢弃,然后重试。