如果在输入中我给出任何字符数据,为什么这不会抛出部分

时间:2017-10-10 19:27:27

标签: c++

#include <iostream>
using namespace std;

int main()
{
    int x;
    cin>>x;
    cout << "Before try \n";
    try {
        cout << "Inside try \n";
        if (x <0)
        {
            throw x;
            //cout << "After throw (Never executed) \n";
        }
    }
    catch (int x ) {
        cout << "Exception Caught \n";
    }
    catch (char x ) {
        cout << "Exception hjCaught \n";
    }  
    return 0;
}

如果在输入中我给出任何字符数据,为什么这不会抛出部分。我的代码是错误的,因为它适用于整数数据类型。

2 个答案:

答案 0 :(得分:0)

我不明白为什么你添加了最后一个catch (char x)条款。

当程序看起来像这样:

#include <iostream>

using namespace std;

int main()
{
  int x;
  cin>>x;
  cout << "Before try \n";
  try {
    cout << "Inside try \n";
    if (x <0)
    {
       throw x;
       //cout << "After throw (Never executed) \n";
    }
  }
  catch (int x ) {
    cout << "Exception Caught \n";
  }
}

似乎有效:

  • 正数不会引发异常
  • 负数抛出异常

答案 1 :(得分:0)

根据这个程序,它会在正数时抛出异常。

但是当您在char变量中输入int输入时,输入将会失败,x中会有0

您可以使用此功能进行检查。

#include <iostream>
using namespace std;
int main()
{
    int x;
    cin >> x;
    if (cin.fail())
    {
        cout << "x is " << x << endl;
    }
    cout << "Before try \n";
    try
    {
        cout << "Inside try \n";
        if (x < 0)
        {
            throw x;
            //cout << "After throw (Never executed) \n";
        }
    }
    catch (int x)
    {

        cout << "Exception Caught \n";
    }
    return 0;
}

char输入的程序输出将是

  

     

x是0

     

在尝试之前

     

内部尝试

因为x将为0所以它不会抛出异常,因为条件是 x <0