Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为错误输入编写异常处理?_C++_Exception Handling_Error Handling - Fatal编程技术网

C++ 如何为错误输入编写异常处理?

C++ 如何为错误输入编写异常处理?,c++,exception-handling,error-handling,C++,Exception Handling,Error Handling,我正在尝试编写一个函数,提示用户输入一个五位数,并且我想编写一个异常块来处理错误输入,以防用户试图输入字符串或一些非整数输入 我知道如何为分母为0的除法函数之类的函数编写异常处理块,但我不知道如何为我无法控制的输入编写异常处理块。首先,我通常建议不要这样做——用户的错误输入几乎是规则,而不是例外 如果您坚持这样做,您可能会接受任何输入,然后在不需要时抛出异常: // Warning: untested code. // Accepting negative numbers left as

我正在尝试编写一个函数,提示用户输入一个五位数,并且我想编写一个异常块来处理错误输入,以防用户试图输入字符串或一些非整数输入


我知道如何为分母为0的除法函数之类的函数编写异常处理块,但我不知道如何为我无法控制的输入编写异常处理块。

首先,我通常建议不要这样做——用户的错误输入几乎是规则,而不是例外

如果您坚持这样做,您可能会接受任何输入,然后在不需要时抛出异常:

// Warning: untested code.    
// Accepting negative numbers left as an exercise for the reader.
int get_int(std::istream &is) { 
    std::string temp;

    std::getline(temp, is);

    for (int i=0; i<temp.size(); i++)
        if (!isdigit(temp[i]))
            throw std::domain_error("Bad input");
    return atoi(temp);
}
//警告:未测试的代码。
//接受负数作为读者的练习。
int get_int(std::istream&is){
std::字符串温度;
std::getline(温度,is);

对于(int i=0;i>
读取int使用该机制)。

最简单的解决方案是读取字符串,并将其转换为整数,例如使用
atoi
。如果结果为零,而字符串不是“0”,您知道输入不是数字的,无需自己循环字符串。

当从另一台机器或进程接收数据时,异常通常是合适的,因为没有理由期望无效数据出现在其他有效数据流中。关于用户输入,异常只应在c中使用表示与正常程序流明显不同的ASE。例如,如果一个程序有一个tty样式的接口,并且一个本应读取一行输入的例程得到一个control-C,那么这样的例程抛出一个异常可能是有用的。control-C不一定要结束程序,但如果程序希望读取用户的几行输入,在一行中键入control-C通常会导致跳过其余的输入。

您使用的是
atoi()
但仍然要检查字符串中的每个字符是否有非数字。为什么?谢谢。出于某种原因,我一直认为输入必须存储在整数变量中。将输入作为字符串接受,然后将其转换可以解决我的问题。@vsz:他的问题是专门检查错误输入并抛出异常n当遇到时。完成此操作后,
atoi
是返回int的最快和最简单的方法。不幸的是,我需要使用0来终止程序的输入部分,因此我需要知道输入何时真正为0。您可以单独检查输入是否为0。有关更详细的讨论,请访问