try
{
int selection;
if(selection > 4 || selection < 1)
throw selection;
}
catch(int selection)
{
cout << "Menu selection out of range." << endl;
}
上述代码适用于超出范围的int值,但如果在(cin&gt;&gt; selection)输入char值,则无法使其工作。
我试图发布带有省略号[catch(...)]的catch块来计算char条目,但这不起作用。
我还尝试了一个带有[catch(char selection)]的catch块,但这也不起作用。
我想使用异常来处理此错误,因为它有助于我在其他菜单类型区域中的整个项目。
答案 0 :(得分:0)
您应该尝试使用该代码段:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
while (true) {
cout << "Please enter a valid number: ";
getline(cin, input);
// This code converts from string to number safely.
stringstream myStream(input);
if (myStream >> myNumber)
break;
cout << "Invalid number, please try again" << endl;
}
答案 1 :(得分:0)
您可以使用字符串使cin
捕获输入,如果无法将其解析为int,则抛出异常。一种方法是以下列方式使用Dan Moulding's answer中的str2int
函数:
std::string str;
cin >> str;
int selection;
STR2INT_ERROR err = str2int(selection, str.c_str());
try
{
if(err != SUCCESS || selection > 4 || selection < 1)
throw str;
}
catch(std::string &selection)
{
cout << "Menu selection [" << selection << "] invalid" << endl;
}
答案 2 :(得分:0)
{
int a;
try
{
cout << "Enter:";
cin >> a;
if (!a)
{
throw 1;
}
cout<<"Int";
}
catch (...)
{
cout << " no. Should be int" << '\n';
}
}
小心点 此代码仅在输入为字符时有效,如果输入为浮点数则无效