很不理解,这是为什么,实在想不通。

#include<stdio.h>
void main( )
{
int a = 5, b = 2, c = 0;
if (a = b + c)
{
printf("* * *\n");
}
else
{
printf("$ $ $\n");
}
}

为什么输出是 * * * 而不是$ $ $

if里改成==
因为一个=是赋值运算 即a=b+c,a的值为2。任何非0的值都为true。所以执行了if里的语句而不是else的语句

你这里是赋值,不是判断

img


应该是==

C语言基础问题吧.
按代码写法应该是要判断 a(b + c) 相等, 判断相等应该使用 ==, 而不是 = (不能一个等号).
正确写法是 if ( a == b + c ) ...
单个 = 不仅进行赋值操作, 整个表达式还有返回值, 返回的是赋值后左边变量的值. a = b + c 依次做了三个操作: 计算 b + c 的值, 把结果存入 a, 返回 a 的值. 大部分时候是单独写赋值语句, 所以最后一步其实是被忽略了.
所以,
if ( a = b + c) ...
相当于以下两句,
a = b + c;
if ( a ) ...
代码中其实是在判断 if ( 2 ) ... 所以永远是判断成立.

a=b+c,这是把b+c的结果赋值给a,然后判断a是否是真的,而不是a==b+c