gpt4 book ai didi

c++ - 错误功能故障

转载 作者:行者123 更新时间:2023-12-03 08:55:47 26 4
gpt4 key购买 nike

我目前正在使用C++进行编程原理和实践,但我不太了解如何使用本书中使用的错误函数。

功能是

inline void error(const string& s)
{
throw runtime_error(s);
}

它包含在std_lib_facilities头文件中。

这是一个利用它的小程序。
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");
}

我的问题是,如果在抛出错误时没有捕获错误的陷阱,那么该错误函数应该如何工作,以便可以显示您的消息。

最佳答案

为了确保打印错误消息,您需要自己执行此操作,而不是依靠实现质量。

喜欢,

#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;
}

免责声明:编译器未修改过的代码。

提示:您可以使用免费的AStyle格式化程序来修复代码的格式。

关于c++ - 错误功能故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26269259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com