问题
#include <stdio.h>
int main()
{
int x = 0;
if (x++)
printf("true\n");
else if (x == 1)
printf("false\n");
return 0;
}
Output:
false
Why is the output false?
x++ is post increment; this means that the value of x is used then it is incremented.
If it is so, then x=0 should be used and the answer should be true.
回答1:
In C, 0 is treated as false. In x++, the value of x, i.e, 0 is used in the expression and it becomes
if(0) // It is false
printf("true\n");
The body of if doesn't get executed. After that x is now 1. Now the condition in else if, i.e, x == 1 is checked. since x is 1 , this condition evaluates to true and hence its body gets executed and prints "false".
回答2:
Post increment means that it returns the current value (in this case for the purpose of the if) and increments it afterwards. It is equivalent to
if(x) {
x++;
// ...
} else {
x++;
// ...
}
回答3:
0 is equivalent to false in C. As you are using post-increment operator, condition is evaluated before increment so x is false and printf("true\n"); is never executed. Then goes to else and succeeds evaluating x == 1, then prints false.
As a good practice, try to avoid assignations in condition sentences.
回答4:
0 is false in C. You're using the post-increment operator.
回答5:
You yourself wrote: "x++ is post increment, this means that the value of x is used then it is incremented"
Consider what that means:
x is
0The expression is evaluated, 0 is false, so the expression is false.
The post increment happens, changing x from
0to1.
(After the expression was evaluated)
回答6:
I believe this simply could fix the error
#include <stdio.h>
int main()
{
int x = 0;
if (++x)
printf("true\n");
else if (x == 1)
printf("false\n");
return 0;
}
来源:https://stackoverflow.com/questions/21435072/how-does-the-increment-operator-work-in-an-if-statement