void main()
{
int i=4,j=12;
if(i=5 && j>5)
printf("Hi!");
else
printf("Hello!");
}
首先,上述代码的输出是hi!。应该打招呼,但是如何打印嗨?
if语句
中的条件if(i=5 && j>5)
等于
if( i = ( 5 && j>5 ))
AS 5不等于0,而J的确大于5,然后表达式( 5 && j>5 )
评估为1
,并分配给变量i
。
来自C标准(6.5.16分配运算符(
3一个分配操作员在指定的对象中存储一个值 左操作数。分配表达式具有左侧的值 作业后的操作数 ...
因此,由于变量i
的值等于1
,因此执行IF条件。
看来您的意思是
if(i==5 && j>5)
^^^^
考虑到,根据C标准,无参数的功能主函数应像
一样声明。int main( void )
i=5
是一个完全有效的表达式,即使不是平等测试。该分配产生的值不是零,因此条件仍然是正确的。
您可以在条件参数中分配变量,例如
While((a=b)!=null){
...
)
尝试输出每个变量(i,j(以查看发生了什么