Sem*_*ted 0 c++ methods recursion function
所以,我有我需要打破目前的功能和回到函数的开始,一些包括错误检查(我没有学过的情况下try,throw或者catch还)和最近我一直在使用递归忽略了这样一个事实,即递归不像a一样goto简单地返回到函数的开头而是创建一个单独的自身副本,因此如果我使用递归来捕获客户端输入错误之类的东西,如果客户端产生足够的错误,它可以导致潜在的内存泄漏.
我想知道是否有一个特定的功能可以让我'重启'一个功能.
作为使用伪伪代码的示例:
int foo(){
//prompt for and receive input
if(!matchCondition)
//stop foo() and restart foo()
//does something
}
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一另一件事就是将函数调用放在一个循环中,但是如果例如函数在main()我不能完全将调用main放在循环中main而不创建至少一个重复,那么这不是最佳的.另一个不起作用的例子是,如果函数需要返回没有限制的东西,那么可以自然地产生"错误代码"而不会发生错误.
bool ifError=1;
while(ifError){
ifError = foo();
}
int foo(){
//prompt for and receive input
if(!matchCondition)
return 1;
//do something
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我唯一能想到的是一个goto指向foo()被调用行的语句.如果它存在,但我知道这是我做过的最糟糕的事情.
goto不是"你做过的最糟糕的事情"; 实际上,有些情况下,明智goto比任何替代方案都更具可读性.
但是,这不是其中之一.我建议你这样做:
TYPE input_thing_from_user()
{
TYPE rv;
do
rv = read_input_from_user();
while (is_invalid(rv));
return rv;
}
Run Code Online (Sandbox Code Playgroud)
使用单独的循环输入每个东西; 如果用户在列表末尾附近陷入困境,请不要让用户重新输入所有内容.