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。有关更详细的讨论,请访问