My codes allows the user to enter in a score from 1 to 100, which will either tell them that the score is \"Good\", \"OK\", \"Moron\", or \"Invalid\".
But, when I compil
It is happening because instead of using one control flow you use multiple (thus if condition is met before the last if
control flow (score >= 55
through score <= 100
), else
code from the last one is also executed). You can use else if
branches:
if (score >= 80 && score <= 100){
printf("Good\n",);
} else if (score >= 55 && score <= 79){
printf("OK\n",);
} else if (score >= 1 && score <= 54){
printf("Moron\n",);
} else {
printf("Invalid\n");
}
You can also use nested if
/else
statements, but the solution above seems less cumbersome.
Each if
statement is a standalone conditional statement. Your example has three groups of conditional statements:
if (score >=80 && score <= 100)
if (score >=55 && score <=79)
if (score >=1 && score <=54) { ... } else { ... }
So if score
has the value 55
, it will match against #2 above and the else
of #3.
One solution here would be to combine the above statements into one group. You can do this with else if
.
e.g.
if (*expr*) {
...
} else if (*expr*) {
...
} else if (*expr*) {
...
} else {
...
}
You have 2 if-else
statements and both get executed. So you will do "something" for both of them. Walk through your code with score=55
and you'll find the problem.
2 solutions:
if
s "standalone" (so only one will pass)else
s to ensure only one of your branches executes.