Search code examples
cif-statementlogical-operators

IF statement with logical && and || operators


I have the following code:

if (scanf("%d %d %d", &number1, &number2, &number3) == 3 &&
    ((number1 == rndNumber) || (number2 == rndNumber) || (number3 == rndNumber))) {
    printf("Champ!\n");

} else if ((number1 && number2 > rndNumber) || (number1 && number3 > rndNumber) ||
           (number2 && number3 > rndNumber)) {
    printf("else if!\n");
} else {
    printf("else\n");
}

If the rndNumber is for example: 10

and the input for the 3 numbers is: 1, 11, 1 or 1, 1, 11 or 11, 1, 1 or 1, 1, 1

The else statement will only be executed on the third and fourth input..I dont understand why


Solution

  • The sub-statement of this if statement

    } else if ((number1 && number2 > rndNumber) || (number1 && number3 > rndNumber) ||
               (number2 && number3 > rndNumber)) {
        printf("else if!\n");
    }
    

    will be executed when either number2 is greater than rndNumber or when number3 is greater than rndNumber provided that neither number1 or number2 is equal to zero.

    For this numbers

    1, 11, 1 or 1, 1, 11
    

    this condition is valid.

    For this numbers

    11, 1, 1 or 1, 1, 1
    

    the condition is not valid.

    Pay into account that for example this sub-condition

    (number1 && number2 > rndNumber)
    

    is equivalent to

    (number1 != 0 && number2 > rndNumber)