【问题标题】:C++ Try Catch Block does not catch an exceptionC++ Try Catch Block 不捕获异常
【发布时间】:2012-08-06 00:36:28
【问题描述】:

我是 C++ 的初学者,我正在尝试创建一个简单的控制台程序来计算线性方程的“m”和“b”...解析用户提供的输入双精度,我正在使用字符串流和使用 try-catch 块来检查错误输入。即使 catch 块有一个全局异常 [Unhandled exception at 0x74c8b9bc in Equation Solver.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..]

double XOne;`enter code here`
double YOne;
double XTwo;
double YTwo;
bool inputCheck = false;
while (inputCheck == false)
{
    Clear();
    WriteLine("**Linear Equation**");
    Write("X1: ");
    string xone = ReadLine();
    Write("Y1: ");
    string yone = ReadLine();
    Write("X2: ");
    string xtwo = ReadLine();
    Write("Y2: ");
    string ytwo = ReadLine();
    try
    {
        stringstream s1(xone);
        if (s1 >> XOne) { s1 >> XOne; } else { throw; }
        stringstream s2(yone); // consider I give an invalid input for this variable
        if (s2 >> YOne) { s2 >> YOne; } else { throw; } // this doesn't solve the problem
        stringstream s3(xtwo);
        if (s3 >> XTwo) { s3 >> XTwo; } else { throw; }
        stringstream s4(ytwo);
        if (s4 >> YTwo) { s4 >> YTwo; } else { throw; }
    }
    catch (...) { WriteLine("Invalid Input"); ReadLine(); }
}

LinearEquation equation;
equation.Initialize(XOne, YOne, XTwo, YTwo);
stringstream s5;
s5 << equation.m;
string m = s5.str();
stringstream s6;
s6 << equation.b;
string b = s6.str();
Write("Y = ");
Write(m);
Write("X + ");
WriteLine(b);
ReadLine();

编辑 第一个建议就像一个魅力......谢谢! 这是我按照审稿人修改后的代码。

double XOne;
double YOne;
double XTwo;
double YTwo;
bool inputCheck = false;
while (inputCheck == false)
{
    Clear();
    WriteLine("**Linear Equation**");
    Write("X1: ");
    string xone = ReadLine();
    Write("Y1: ");
    string yone = ReadLine();
    Write("X2: ");
    string xtwo = ReadLine();
    Write("Y2: ");
    string ytwo = ReadLine();
    try
    {
        stringstream s1(xone);
        if (s1 >> XOne) { s1 >> XOne; } else { throw runtime_error("Invalid Input"); }
        stringstream s2(yone);
        if (s2 >> YOne) { s2 >> YOne; } else { throw runtime_error("Invalid Input"); }
        stringstream s3(xtwo);
        if (s3 >> XTwo) { s3 >> XTwo; } else { throw runtime_error("Invalid Input"); }
        stringstream s4(ytwo);
        if (s4 >> YTwo) { s4 >> YTwo; } else { throw runtime_error("Invalid Input"); }
    }
    catch (runtime_error e) { WriteLine(e.what()); ReadLine(); }
}

LinearEquation equation;
equation.Initialize(XOne, YOne, XTwo, YTwo);
stringstream s5;
s5 << equation.m;
string m = s5.str();
stringstream s6;
s6 << equation.b;
string b = s6.str();
Write("Y = ");
Write(m);
Write("X + ");
WriteLine(b);
ReadLine();

【问题讨论】:

    标签: c++ exception error-handling try-catch


    【解决方案1】:

    throw 不带参数只能在处理异常时使用(即在 catch 块中或从 catch 块直接或间接调用的函数中),否则您必须使用带有参数的 throw通常是某种异常对象。

    如果在未处理异常时执行throw std::terminate 将被调用以结束您的程序。

    例如(在#include &lt;stdexcept&gt;之后)

    throw std::runtime_error("Bad input");
    

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多