c - if 语句处理两次?

标签 c if-statement

我是 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/

相关文章:

javascript - JQuery:如果attr(left)等于0px怎么写?

java - 比较嵌套 if 条件和单个 if 条件

java - 为什么我的程序在条件为假时进入 while 循环?

c - 如何从指针读取 64 位到 8 位值

javascript - 有没有办法引用条件语句或循环的条件?

通过 openssl 函数使用 sha1withRsa 检查文件是否正确

c - 如何移动链表的数据? (在C中)

Java 从扫描仪输入中查找最小值总是导致零

c - 跳跃前先看一下

动态调用带有可变参数的函数