如果声明过程两次?

时间:2013-10-26 19:13:57

标签: c if-statement

我是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..");
}

2 个答案:

答案 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确实大于number3number4,则

并且为number5