void main()
{
int i=4,j=12;
if(i=5 && j>5)
printf("Hi!");
else
printf("Hello!");
}
首先,上面代码的输出是Hi!。据我所知它应该显示语法错误,因为i = 5是一个assingment运算符而不是i == 5,如果i == 5那么它也是假的并且应该打印Hello,但是怎么打印你好?
答案 0 :(得分:5)
if语句中的条件
if(i=5 && j>5)
相当于
if( i = ( 5 && j>5 ))
由于5不等于0且j确实大于5,因此表达式( 5 && j>5 )
的计算结果为1
并分配给变量i
。
来自C标准(6.5.16分配操作员)
3赋值运算符将值存储在指定的对象中 左操作数。 赋值表达式的值为left 作业后的操作数 ...
因此,当变量i
的值等于1
时,则执行if条件。
看来你的意思是
if(i==5 && j>5)
^^^^
考虑到根据C标准,没有参数的函数main应声明为
int main( void )
答案 1 :(得分:0)
i=5
是一个非常有效的表达式,即使它不是对相等性的测试,也是有条件的。该赋值产生的值不为零,因此条件仍为真。
答案 2 :(得分:0)
您可以在条件参数中分配变量,例如
While((a=b)!=null){
...
)
尝试输出每个变量(i,j)以查看最新情况