错误函数故障 我现在用C++做编程原理和实践,我不太明白如何使用错误函数,这是书中使用的。
功能是错误函数故障 我现在用C++做编程原理和实践,我不太明白如何使用错误函数,这是书中使用的。,c++,error-handling,runtime-error,C++,Error Handling,Runtime Error,功能是 inline void error(const string& s) { throw runtime_error(s); } 它包含在std_lib_设备头文件中 这是一个利用它的小程序 int main() { cout << "Please enter expression (we can handle +, –, *, and /)\n"; cout << "add an x to end expression (e.
inline void error(const string& s)
{
throw runtime_error(s);
}
它包含在std_lib_设备头文件中
这是一个利用它的小程序
int main()
{
cout << "Please enter expression (we can handle +, –, *, and /)\n";
cout << "add an x to end expression (e.g., 1+2*3x): ";
int lval = 0;
int rval;
cin>>lval; // read leftmost operand
if (!cin) error("no first operand");
for (char op; cin>>op; ) { // read operator and right-hand operand
// repeatedly
if (op!='x') cin>>rval;
if (!cin) error("no second operand");
switch(op)
{
case '+':
lval += rval; // add: lval = lval + rval
break;
case '–':
lval –= rval; // subtract: lval = lval – rval
break;
case '*':
lval *= rval; // multiply: lval = lval * rval
break;
case '/':
lval /= rval; // divide: lval = lval / rval
break;
default: // not another operator: print result
cout << "Result: " << lval << '\n';
keep_window_open();
return 0;
}
}
error("bad expression");
}
我的问题是,如果在抛出错误时没有捕获错误以显示消息,那么这个错误函数将如何工作。要确保打印错误消息,您需要自己执行,而不是依赖于实现质量
像
免责声明:编译器未触及代码
提示:您可以使用免费的AStyle formatter来修复代码的格式。在您显示的代码中,如果调用了error,则会立即中止程序。我不确定我会认为这是属于工作的含义,确切地说。我想说,也许现在是开始寻找更好的书的好时机。我记得,斯特劳斯特鲁普设计了页眉,以便在最初几周的学习中使用,这样开始时就更容易了,而不需要知道以后的概念。无论如何,当异常未捕获时,您的实现可能会打印消息。如果没有捕获,则程序终止。您的编译器可能决定是否显示该消息。您可以在main.In std_lib_facilities.h周围添加一个catch处理程序。在std_lib_facilities.h中,我们提供了一个error函数,默认情况下,该函数使用系统错误消息加上作为error参数传递的字符串终止程序。只是有点困惑而已。我知道,如果你添加catch语句,它将按预期工作,只是想问我是否遗漏了什么。
#include <iostream> // std::cout, std::cerr
#include <stdexcept> // std::runtime_error
#include <stdlib.h> // EXIT_FAILURE, EXIT_SUCCESS
#include <string> // std::string
using namespace std;
auto fail( string const& s ) -> bool { throw runtime_error( s ); }
void cpp_main()
{
// What you would otherwise put directly in `main`, e.g.
cout << "x? ";
double x;
cin >> x
|| fail( "Uh oh, that was not a valid value for x." );
}
auto main() -> int
{
try
{
cpp_main(); return EXIT_SUCCESS;
}
catch( exception const& x )
{
cerr << "!" << x.what() << endl;
}
return EXIT_FAILURE;
}