【发布时间】:2016-04-21 15:04:19
【问题描述】:
我在 HR 上遇到问题,但不知道如何在不使用条件语句的情况下检查错误。这是如何在 C++ 中完成的?
// if string is int output it, else output "Bad string"
// need to do this without any loops/conditionals
int main(){
string S;
char *end;
long x;
cin >> S;
const char *cstr = S.c_str();
x = strtol(cstr,&end,10);
if (*end == '\0')
cout << x;
else
cout << "Bad string";
return 0;
}
我应该使用 strtol 以外的东西吗?
【问题讨论】:
-
std::stol接受std::string并在无法进行转换时抛出异常。另外,您的标题是int,但您的代码使用long。没关系,但请纠正一个或另一个以保持一致。 -
如果我使用 stoi,我可以将异常设置为自定义消息吗?我实际上需要一个我刚刚用 long 测试的 int。
-
您捕获异常(有 2 个,用于 2 种不同的情况)并打印出您想要的任何内容。
-
嗯,例外情况可能有点超出您目前所学的范围。有一个基本的介绍here,但它显示了捕获像
ints 这样简单的东西,你需要catch(std::invalid_argument const& e) { ... }。 catch 块与函数无关。 -
规范说如果有任何循环或条件语句将被标记为错误。我想我需要使用
stoi,然后弄清楚捕获异常是如何工作的。
标签: c++ error-handling conditional strtol