我是C ++的初学者,我正在努力对ifs里面的ifs做一个练习。
第一张图片:http://img51.imageshack.us/img51/5851/b9qt.jpg 没有其他如果声明所以它被发布两次,但为什么它有错误的逻辑?但是,发布的第二个声明是正确的。 O_O
第二张图片:http://img96.imageshack.us/img96/1351/94bc.jpg 这次使用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..");
}
答案 0 :(得分:3)
这是解决这个问题的一种非常糟糕的方法,但是你会在以后继续学习时理解为什么。目前,作为理解陈述的练习,一个问题是
if(number3 >= number4 && number5) {
...
}
不符合您的想法。它实际上被解释为更像
if( (number3 >= number4) && (number5) )
请注意number5
单独出现。 C ++可以让你说出像
bool someFlag = true;
if(someFlag) { ... }
作为
的简写if(someFlag == true)
将此与C ++(和C)中的任何数字相结合,可以将任何数字视为布尔值。也就是说,
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”,因为0在被解释为布尔值时被视为false,而任何其他数字都为true。
回到你的原始代码,你有
if(number3 <= number4 && number5)
这是两个不同的布尔比较,如果两个部分都为真,则if语句为true。第1部分是您已经了解的(number3 <= number4)
。第2部分只是number5
,它遵循我刚才描述的相同规则。
你需要说的是
if(number3 <= number4 && number3 <= number5)
没有简短的表示法。
答案 1 :(得分:0)
if
语句中的逻辑操作存在问题。语法是正确的,但结果不是您所期望的。此语句检查number3
是否大于number4
,如果true
则为1。然后,该结果将应用于下一个逻辑运算。假设number3 >= number4
为真且number5
为&gt; 0,那么整个表达式为true
。
number3 >= number4 && number5
因此,这不会检查number3
是否大于number4
且大于number5
。
相反,你必须写
(number3 >= number4) && (number3 >= number5)
如果true
确实大于number3
和number4
,则并且为number5
。