if else条件与和运算符

Mat*_*iac -1 c if-statement operators output

void main()
{
int i=4,j=12;
if(i=5 && j>5)
    printf("Hi!");
else
        printf("Hello!");
}
Run Code Online (Sandbox Code Playgroud)

首先,上面代码的输出是Hi!.据我所知它应该显示语法错误,因为i = 5是一个assingment操作符而不是i == 5,如果i == 5那么它也是假的并且应该打印您好,但怎么打印嗨?

Vla*_*cow 5

if语句中的条件

if(i=5 && j>5)
Run Code Online (Sandbox Code Playgroud)

相当于

if( i = ( 5 && j>5 ))
Run Code Online (Sandbox Code Playgroud)

由于5不等于0且j确实大于5,因此表达式( 5 && j>5 )求值1并赋值给变量i.

来自C标准(6.5.16分配操作员)

3赋值运算符将值存储在左操作数指定的对象中.赋值表达式具有赋值后左操作数的值 ...

因此,当变量的值i等于,1则执行if条件.

看来你的意思是

if(i==5 && j>5)
   ^^^^
Run Code Online (Sandbox Code Playgroud)

考虑到根据C标准,没有参数的函数main应声明为

int main( void )
Run Code Online (Sandbox Code Playgroud)