该函数应返回1,但返回0

时间:2018-09-04 10:25:03

标签: c++ function reference

以下代码接受输入x和y,然后调用一个函数。该函数应该被调用3次,在这种情况下它将返回1。但是,如果x或y的值下降到非常低的水平,则该函数将不会被调用3次,在这种情况下它将返回0。 / p>

我的输入是3、22。我可以看到在函数被调用3次之后,t的值变为3,但是,它返回的是0而不是1(从i的值可以看出)。有人可以解释为什么会这样吗?

PS:代码的某些部分已被删除,因此我们只能专注于相关部分。

Task<Uri> newTask = task.getResult().getMetadata().getReference().getDownloadUrl();
            newTask.addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    yourUriVariable= uri;
                }
            });

2 个答案:

答案 0 :(得分:4)

如果使用已建立的约定之一写出花括号,您将很快发现在所有程序控制路径上没有明确的return值。

这意味着您的代码的行为是 undefined 。 (请注意,main是此规则的例外,其中隐式添加了隐式return 0;语句。)

您可能打算在丢失的分支上写return turn_yeh(x, y)

参考:https://en.wikipedia.org/wiki/Indentation_style

答案 1 :(得分:2)

您的函数可能需要return递归调用的结果:

int turn_yeh(int &x, int &y)
{
    static int t = 0;

    cout << "t : " << t << " x: "<< x<< " y : " << y<<endl;

    if (t != 0 && t% 3 == 0) return 1;
    if(x!= 0 && t!= 2){x--; t++; return turn_yeh(x,y);}
    else if(y >=10 && t!=2){y -= 10*t; return turn_yeh(x,y);}
    if( y >= 2 && t == 2){y -= 2; t++; return turn_yeh(x,y);}
    else return 0;
}
相关问题