循环尝试...捕获...以确保输入有效或使用控制语句?

时间:2018-02-20 17:50:14

标签: c++ error-handling try-catch

我对try ... catch ...的使用有疑问。 我想知道如何充分利用try .... catch ...在用户输入错误数据的情况下,需要在程序进行之前进行纠正。在第一个代码中,我不能在没有循环的情况下继续使用,如果我想使用循环,我可以简单地使用if ... else ...进行错误检查,就像第二个代码一样。我真的需要尝试......赶上......?

int size;
try
{
    cin >> size;
    Stack stack(size); //create a Stack(int) object.
}
catch(InvalidStackSize e)
{
    cerr << "Invalid size for stack.\n";
    continue; //What should I do here to ensure a stack with right size is entered before proceeding with rest of the program?
}

在第二个代码中,我使用带有if ... else ...的循环语句。如果我总是需要循环来获得正确的用户输入,为什么要使用try ... catch ...?

int size;
Stack stack;
do
{
    cin >> size;
    if( size == 0 )
        continue;
    else
    {
        Stack tmp(size);
        stack = tmp;
        break;
    }
}while(true);

1 个答案:

答案 0 :(得分:1)

Exceptions用于异常行为而非错误检查(编译时错误)Exceptions发生在执行指令的过程中,一旦发生异常,如果你没有正确处理这些异常,那么下一条指令就不会被执行&amp;过程停止。

来自C++ Standard

  

异常处理提供了一种转移控制的方法   从执行线程到异常的信息   与先前由执行传递的点相关联的处理程序。

因此,要处理这些例外情况,C++建议使用trythrowcatch进行异常处理。

对于下面的代码exception handling不是必需的,因为代码的任何指令都不会导致任何exceptionruntime error处理编译时错误,您可以使用if..else就像你做的那样。

do
{
    cin >> size;
    if( size == 0 )
        continue;
    else
    {
        Stack tmp(size);
        stack = tmp;
        break;
    }
}while(true);