当输入应为int时,如何为char创建异常

时间:2013-09-28 08:03:06

标签: c++ exception

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块,但这也不起作用。

我想使用异常来处理此错误,因为它有助于我在其他菜单类型区域中的整个项目。

3 个答案:

答案 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';
    }
}

小心点 此代码仅在输入为字符时有效,如果输入为浮点数则无效