try / catch块问题 - (0-9)控制台程序之间的整数

时间:2011-05-28 15:49:12

标签: c++ try-catch

我在运行下面的代码时遇到问题 我需要做的就是让用户输入一个整数,然后将其保存到我的cNumber变量中。

然后将从cNumber中减去zero的ASCII值的值赋给变量iNumber,并在try / catch块中测试它,并将有效(0-9)整数乘以2的结果cout。

#include <iostream>
using namespace std;

// Declare variables 
char cNumber;
int iNumber;

int main () {
  // Begin infinite while loop
  while (1) {
    // Prompt user to enter aa number within th range of (0-9)
    cout << "Please enter an number between 0 and 9: ";

    //Get character from the keyboard and validate it as integer 
    //within the range (0-9)
    try {
      //Assign user input alue into cNumber variable
      cin >> cNumber;

      //Subtract ASCII value of zero from cNumber and assign to iNumber 
      iNumber = cNumber - 48;
      if (iNumber < 0) {
        throw string(cNumber + " is not within the range of (0-9)");
      }
      if (iNumber > 9) {
        throw string(cNumber + " is not within the range of (0-9)");
      }
    }
    catch (exception ex) {
      cerr << cNumber + " is not a valid selection.... Input Error" << endl;
    }
    cout << "The result is " + iNumber * 2;
  }
}

3 个答案:

答案 0 :(得分:3)

目前还不清楚你在问什么,但我会对你的一些问题进行一些抨击。

表达式cNumber + " is not within the range of (0-9)"charchar const*之间的加法,无效。你可能不小心操纵指针地址。

可以将char连接到字符串,但它必须是实际的std::string对象。

所以:

throw cNumber + string(" is not within the range of (0-9)");

同样,您在代码中稍后会误导+

写:

cerr << cNumber << " is not a valid selection.... Input Error" << endl;

你也在抛出std::string,但抓住了std::exception。字符串不是来自异常。阅读C ++书中有关try / catch的章节。 (无论如何不建议投掷/捕捉字符串,也没有值得抓住。)

此外,如果输入不是数字,则提取到int将失败...但您没有cin流上的错误检查/重置。

对于代码的每一行,请看一下它的每个组成部分并问自己,“这是做什么的?为什么我写这个?”如果对于任何一段代码,您无法回答并证明这两个问题的答案,请停下来思考它是否正确。

答案 1 :(得分:2)

您正在抛出std::string,但您的catch块被声明为具有std::exception参数。

不知道这种不匹配是否是您问题的根源。

在任何情况下,都不建议抛出std::string,因为这个类可以抛出异常,并且在处理前一个异常时抛出异常,大麻烦(突然终止)。

答案 2 :(得分:0)

对我来说似乎过于复杂,为什么不呢:

#include <iostream>
using namespace std;

int main ()
{
  // Begin infinite while loop
    while (1) 
    {
        // Prompt user to enter aa number within th range of (0-9)
        cout << "Please enter an number between 0 and 9: ";

        // Get character from the keyboard and validate it as integer within the range (0-9)
        // Assign user input value into cNumber variable
        char cNumber;
        cin >> cNumber;

        // Subtract ASCII value of zero from cNumber and assign value to iNumber variable
        int iNumber = cNumber - 48;

        if (iNumber < 0 || iNumber > 9)
        {
            cerr << cNumber << " is not within the range of (0-9)" << endl;
        }
        else
        {
            cout << "The result is " + iNumber * 2;
        }
    }
}