2012-08-08 44 views
2

我是C++的初学者,试图创建一个简单的控制台程序来计算线性方程的'm'和'b'...来解析输入double用户提供,我正在使用一个stringstream并使用一个try-catch块来检查错误的输入。持久性错误持续下,即使catch块有[方程式Solver.exe未处理的异常在0x74c8b9bc:微软C++异常:[重新抛出]在内存位置00000000 ..]一个全局异常C++ Try Catch Block没有发现异常

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(); 

回答

14

throw没有参数的当存在正在处理的异常只能用(即,在catch块或直接或间接地从一个catch块调用的函数),否则必须使用掷与参数这通常是某种异常对象。

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

例如(在#include <stdexcept>之后)

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