我是 C++ 的初学者,我正在尝试在 ifs 中进行 ifs 练习。
第一张图片:http://img51.imageshack.us/img51/5851/b9qt.jpg 没有 else if 语句,所以发了两次,但是为什么逻辑错误呢?不过,发布的第二个声明是正确的。 o_o
第二张图片:http://img96.imageshack.us/img96/1351/94bc.jpg 这次用了else if语句,贴过一次,但是逻辑错误。我把代码分析了一遍又一遍,没有发现任何问题。 XD 使用的逻辑不应该属于最后一个语句吗? o_o
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++(和 C)中,任何数字都可以被视为 bool 值。也就是说,
int x = 42;
int y = 0;
if(x) {
printf("x is true\n");
}
if(y) {
printf("y is true\n");
}
此代码将打印“x is true”,但不会打印“y is true”,因为当解释为 bool 值时,0 被视为 false,而任何其他数字都为 true。
所以回到你的原始代码,你已经
if(number3 <= number4 && number5)
这是两个不同的 bool 比较,如果两个部分都为 true,则 if 语句为 true。第 1 部分是 (number3 <= number4)
你已经明白了。第 2 部分只是 number5
,它遵循我刚才描述的相同规则。
你要说的是
if(number3 <= number4 && number3 <= number5)
没有简短的符号。
关于c - if 语句处理两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19610797/