提问者:小点点

有没有方法捕捉STL函数没有被赋予正确的参数的异常?


我正在使用std::stol()将字符串转换为长类型。 但是,如果用户输入字母,如何确保捕获异常?

代码可以在这里找到。

注意:那道题我已经有了正确的方法,我只需要知道该怎么做就好了,而不是:

if ( !(stol(input)) ) // Yes, I know it's stupid to think the output would be bool
    throw 'R'; 

共2个答案

匿名用户

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”的输入。

像往常一样,阅读文档。