怪如果 - 否则if语句但没有错误......为什么?

时间:2018-04-23 11:07:12

标签: c++

帮帮我吧.. 我刚做了期中考试,其中一个问题是“用三个返回最小值的参数创建自己的函数。”

我在C ++中对此进行了编码,如下所示。

int smallest(int a, int b, int c) {
if (a == b && b == c) {
    return a;
}
else if ((a==b&&b!=c)||(b==c&&a!=b)||(a==c&&a!=b)){
    if (a < b) { //a=c <b or a< b=c
        return a;
    }
    else if (a < c) { //a=b <c or a< b=c
        return a;
    }
    else if (b < a) { //b=c <a or b< a=c
        return b;
    }
    else if (c < a) { //b=c <a  or c< a=b
        return c;
    }
    else {
        cout << "Congratz you got -1 point";
        return 99999999;
    }
}
else {
    if (a < b&&a < c) {
        return a;
    }
    else if (b < a&&b < c) {
        return b;
    }
    else {
        return c;
    }
}

当我在VS 2017中运行时,它可以工作但是.. 如果此函数被称为

int main(){
    cout << smallest(2,1,1);
    return 0;
}

我认为这会产生错误,因为还有两个if语句包含这种情况(否则if(b&lt; a)和else if(c&lt; a)...)

计算机不允许选择运行哪个语句。但是为什么这样工作.. ??? :(非常基本的代码,但我不知道..

2 个答案:

答案 0 :(得分:4)

您提到的两个else if语句在某种意义上是排他性的,如果第一个条件的计算结果为true,则忽略第二个条件。即:

if (a < b) { 
    return a;
}
else if (a < c) {       // if this is true then...
    return a;                           
}
else if (b < a) {       // this condition wont even be evaluated
    return b;
}

你似乎对return有误解。请考虑以下代码:

int foo() {
    return 3;
    return 5;
}

这段代码没有错,只是第二个return永远不会被执行。

最后但并非最不重要的是,您应该考虑简化代码。两个if应该足以产生正确的结果。

的一些方面
 if (a is smaller than b and smaller than c) return a;
 else return the smaller of b and c;

答案 1 :(得分:0)

if语句的评估从上到下进行。因此,他们不需要互相排斥,条件的顺序很重要(参见switch)。

请注意,您可以使用简单的

返回最小值
return std::min({a, b, c});