回到C++中的函数开头

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()被调用行的语句.如果它存在,但我知道这是我做过的最糟糕的事情.

zwo*_*wol 5

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)

使用单独的循环输入每个东西; 如果用户在列表末尾附近陷入困境,请不要让用户重新输入所有内容.