我对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);
答案 0 :(得分:1)
Exceptions
用于异常行为而非错误检查(编译时错误)。 Exceptions
发生在执行指令的过程中,一旦发生异常,如果你没有正确处理这些异常,那么下一条指令就不会被执行&amp;过程停止。
来自C++ Standard
异常处理提供了一种转移控制的方法 从执行线程到异常的信息 与先前由执行传递的点相关联的处理程序。
因此,要处理这些例外情况,C++
建议使用try
,throw
和catch
进行异常处理。
对于下面的代码exception handling
不是必需的,因为代码的任何指令都不会导致任何exception
或runtime error
处理编译时错误,您可以使用if..else
就像你做的那样。
do
{
cin >> size;
if( size == 0 )
continue;
else
{
Stack tmp(size);
stack = tmp;
break;
}
}while(true);