我正在使用std::stol()将字符串转换为长类型。 但是,如果用户输入字母,如何确保捕获异常?
代码可以在这里找到。
注意:那道题我已经有了正确的方法,我只需要知道该怎么做就好了,而不是:
if ( !(stol(input)) ) // Yes, I know it's stupid to think the output would be bool
throw 'R';
std::stol()
在输入错误时引发异常。 使用try.。catch
来捕获它们。
从一个评论到另一个答案,这里的目标似乎有些模棱两可。 要回答标题中的问题,要捕获异常,请编写Try...catch
块:
long get_value() {
for (;;) {
std::cout << "Enter a number: ";
std::string text;
std::cin >> text;
try {
return stol(text);
} catch(...) {
std::cout << "Invalid input\n";
}
}
}
但该评论建议,扫描整个输入文本以查看是否有字母的解决方案是合适的。 如果目标是要求输入仅由数字组成,则在调用std::stol
之前不需要扫描每个字符。 比你想象的要聪明。
int last;
std::stol(text, &last);
if (last != text.length())
// got a bad character
这将检测类似“123q”
的输入。
像往常一样,阅读文档。