如果语句处理两次? 我是C++初学者,我正在做关于IFS内的IFS的练习。

如果语句处理两次? 我是C++初学者,我正在做关于IFS内的IFS的练习。,c,if-statement,C,If Statement,第一张图片: 没有其他的,如果声明,那么它被张贴了两次,但为什么它有错误的逻辑?不过,发布的第二条声明是正确的。欧欧欧 第二幅图像: 这次使用了else if语句,发布了一次,但逻辑错误。我反复分析了代码,没有发现任何错误。除息的 使用的逻辑不应该属于最后一个语句吗?欧欧欧 int number1, number2, number3, number4, number5; printf("\n\n First number: "); scanf("%d", &number1); prin

第一张图片: 没有其他的,如果声明,那么它被张贴了两次,但为什么它有错误的逻辑?不过,发布的第二条声明是正确的。欧欧欧

第二幅图像: 这次使用了else if语句,发布了一次,但逻辑错误。我反复分析了代码,没有发现任何错误。除息的 使用的逻辑不应该属于最后一个语句吗?欧欧欧

int number1, number2, number3, number4, number5;

printf("\n\n First number: ");
scanf("%d", &number1);
printf("\n Second number: ");
scanf("%d", &number2);
printf("\n Third number: ");
scanf("%d", &number3);
printf("\n Fourth number: ");
scanf("%d", &number4);
printf("\n Fifth number: ");
scanf("%d", &number5);

if (number3 >= number4 && number5) {
    if (number4 >= number5) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number3, number4, number5);

    printf("\n\n\n Program will now terminate..");
    } else if (number5 >= number4) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number3, number5, number4);

    printf("\n\n\n Program will now terminate..");
    } else {
    printf("\n\n Invalid operation. Program will now terminate..");
    }
} else if (number4 >= number3 && number5) {
    if (number3 >= number5) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number4, number3, number5);

    printf("\n\n\n Program will now terminate..");
    } else if (number5 >= number3) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number4, number5, number3);

    printf("\n\n\n Program will now terminate..");
    } else {
    printf("\n\n Invalid operation. Program will now terminate..");
    }
} else if (number5 >= number3 && number4) {
    if (number3 >= number4) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number5, number3, number4);

    printf("\n\n\n Program will now terminate..");
    } else if (number4 >= number3) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number5, number4, number3);

    printf("\n\n\n Program will now terminate..");
    } else {
    printf("\n\n Invalid operation. Program will now terminate..");
    }
} else {
    printf("\n\n Invalid operation. Program will now terminate..");
}

这是解决这个问题的一个非常糟糕的方法,但是你会在以后继续学习的过程中理解为什么。现在,作为理解if语句的练习,一个问题是

if(number3 >= number4 && number5) {
    ...
}
不会做你认为它会做的事。实际上它的解释更像

if( (number3 >= number4) && (number5) )
请注意,
number5
单独存在。C++让你说出像

之类的东西
bool someFlag = true;
if(someFlag) { ... }
简写

if(someFlag == true)

将此与C++中的任何事实相结合,任何数字都可以被处理为布尔值。就是

int x = 42;
int y = 0;
if(x) {
    printf("x is true\n");
}
if(y) {
    printf("y is true\n");
}
这段代码将打印“x为真”,但不会打印“y为真”,因为0在解释为布尔值时被视为假,而任何其他数字都为真

回到你的原始代码,你有

if(number3 <= number4 && number5)

没有简短的符号。

if语句中的逻辑操作有问题。语法是正确的,但结果不是您所期望的。此语句检查
number3
是否大于等于
number4
,如果
true
,则为1。然后,此结果将应用于下一个逻辑操作。假设
number3>=number4
为true,并且
number5
为>0,则整个表达式为
true

number3 >= number4 && number5
因此,这不会检查
number3
是否大于等于
number4
和大于等于
number5
。 相反,你必须写作

(number3 >= number4) && (number3 >= number5)

< > >是<代码>真< /代码>如果代码>编号3//> >确实更大,等于代码> >编号4< /代码>和<代码>编号5< /代码>。< /P>逻辑运算符不能这样工作。C++中的SCANF和PrTNF?你为什么要对自己这样做?如果你想对数字进行排序,我必须说这可能是最糟糕的方法之一,肯定比冒泡排序更糟糕(至少冒泡排序适用于5个以上的元素)。查找并尝试实现其中的一个(从以下内容开始)。别担心,在实现排序算法时,你会得到大量关于条件的练习,而且它实际上对5个以上的元素有用。你很幸运,你只有5个数字。第一句话说,与英语相比,你不能说“如果x大于4和5”。你必须把它表示成“如果x大于4,x大于5”。好吧,他可以定义一个min函数/宏,然后做
if(数字3)。谢谢你告诉我。我现在就开始。XD@Leeor你甚至可以说如果(number3==std::min({number3,number4,number5}))“克里斯,我错过了C++部分,因为他把它标记为C。然而,比较仍然隐藏在那里。此外,这是挑剔:谢谢你的输入,我会改变它们!”如果狄扬或我的贡献帮助你理解了这个问题,你可以考虑将其中一个答案标记为“已接受”,这样问题就很明显得到了解决。
(number3 >= number4) && (number3 >= number5)