C++ 奇怪的if-else if语句但没有错误…为什么?

C++ 奇怪的if-else if语句但没有错误…为什么?,c++,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 <

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

<>我在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;
    }
}
int最小值(int a、int b、int c){
如果(a==b&&b==c){
返回a;
}
else如果((a==b&&b!=c)| |(b==c&&a!=b)| |(a==c&&a!=b)){

如果(aelse 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;
}
这段代码没有错,只是碰巧第二个
返回值
永远不会执行

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

 if (a is smaller than b and smaller than c) return a;
 else return the smaller of b and c;

if
语句的求值是从上到下进行的。因此它们不需要相互排斥,条件的顺序也很重要(参见
switch

注意:您可以使用简单的

return std::min({a, b, c});

所以你的问题是没有错误?这很奇怪…所以,大约40行代码和200条if/else语句只是为了找到3个值的最小值?我看不出有什么问题。只要试着逐行调试它。你会明白的。祝你好运(:它不会选择运行哪个语句。它会按照编写的语句一个接一个地运行。您可以使用橡皮鸭。您也可以尝试使用两个变量的working case,看看它的行为如何。@Ron谢谢,但我无法使用它,、我必须使用if语句..或者不使用std库
中的某个返回值
@Philipp:这很好,直到
d
出现,但是是的,你的方式减少了比较的次数。
 if (a is smaller than b and smaller than c) return a;
 else return the smaller of b and c;
return std::min({a, b, c});