Operator precedence
It should be noted that the modulo operator has higher precedence than the not-operator (!). Thus, when testing a number if it divides without rest, the two integers need to be put in parantheses: ! (a % b). Without parantheses, this would test (!a) % b. If a is not 0, !a evaluates to 0, so ! a % b is true in that case.
This is demonstrated in the following simple program which tests if i is divisible by 5, once correctly and once faulty.
#include <stdio.h>
int main() {
int i = 10;
//
// Probably as intended,
// prints 'yes'
//
if (! (i % 5) ) {
printf("yes\n");
}
else {
printf("no\n");
}
//
// Probably not as intended:
// prints 'no'
//
if (! i % 5) {
printf("yes\n");
}
else {
printf("no\n");
}
}
Because == has a lower precedence than %, the divisibility can also be tested with a % b == 0.