C语言的赋值号,和等号交换后输出的为什么值不同?

int main()
{
int a,c;
scanf("%d",&a);
c=a%4;
if(c==0)//这里变成if(c=0)
//怎么输入什么都是0
printf("%d",c);
else
printf("%d",c)
return 0;
}//为什么把等号变成赋值号结果不同?

如果是 if(c==0),只有当 c 的值为 0 的时候,条件为 true
如果是 if(c=0),首先将 0 赋值给 c,然后再判断 if(c),如果 c0,则为 false

给一个简单的例子,这里输出的就是 5678,因为执行的是else中的语句

#include<stdio.h>
int main()
{
    int i = 10;
    
    if(i = 0) printf("1234");
    else printf("5678");
    
    return 0;
}

如果你用赋值符号相当于就直接执行c=0;if会将括号里的语句当作true来看,所以这等价于直接赋值

这还用问?如果能互换那用两个不同的运算符干啥?