0
try
{
  int selection;

  if(selection > 4 || selection < 1)  
    throw selection;
}
catch(int selection)
{
   cout << "Menu selection out of range." << endl; 
}

上面的代码适用于超出范围的 int 值,但如果在 (cin >> selection) 处输入 char 值,我无法让它工作。

我试图用省略号 [catch(...)] 发布一个 catch 块来说明 char 条目,但这不起作用。

我也尝试过使用 [catch(char selection)] 的 catch 块,但这也不起作用。

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

4

3 回答 3

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;
}
于 2013-09-28T08:25:19.720 回答
0

您可以cin使用字符串进行捕获输入,如果无法将其解析为 int,则抛出异常。一种方法是按以下方式使用Dan Moulding 的回答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; 
}
于 2013-09-28T08:30:56.533 回答
0
{
    int a;
    try
    {
        cout << "Enter:";
        cin >> a;
        if (!a)
        {
            throw 1;
        }
        cout<<"Int";
    }
    catch (...)
    {
        cout << " no. Should be int" << '\n';
    }
}

请注意,此代码仅在输入为 char 时才有效,而不是在输入为 float 时有效

于 2021-07-07T15:47:26.387 回答