for(i=1;i=-1;i++)
if(i<5) break;
printf("%d\n",i);


我被要求编写以下代码的输出,我无法理解,因为第二个参数应该是一个条件,但是这里是一个赋值,

output: -1


我不明白这是怎么可能的,所以我尝试使用代码

int i=1;
while(i=-1)
{
    printf("condition is true\n");
    if(i<5) break;
}
printf("%d\n",i);


以下代码的输出是

output: condition is true
        -1


谁能解释以上两个代码的工作原理
 而while(i = -1)如何评估为TRUE?

最佳答案

条件始终为真。因为赋值语句的值就是赋值。因此-1为非零值,并且在c中将非零值视为true,因此它始终为true。

正确的用法是==,它比较值并根据相等或不相等返回10

所以在这里,当您执行i = -1并放入while循环条件时-归结为

while( -1 ){
  ...
   /* break here */
}


由于-1c中被视为true,因为它不为零-循环条件的值为true。

这里给出break语句,这样该循环不会变成无限循环。

关于c - 在C中用分号分隔的两个初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48975606/

10-10 00:18