为什么输出1?是因为它是真的吗?

时间:2016-03-09 23:58:10

标签: c

while部分让我困惑,当它说j ++是j = 2还是3?

#include <stdio.h> 
int main() {
int i=2,j=2;
while(i+1?--i:j++) 
    printf("%d",i);
return 0;
}

2 个答案:

答案 0 :(得分:3)

NextSpawn表达式Model.AlarmItems首先检查while是否为非零。如果是,则评估i+1?--i:j++,将其用作i+1测试。如果没有,则评估--i,将其用作while测试。

最初j++为2,因此while为3,非零。因此它评估i,即1,i+1现在为1.然后执行正文,打印1。

第二次,--i为1,因此i为2,非零。所以它再次评估i,即0,i+1现在为0.然后退出循环,因为--i表达式的值为0。

答案 1 :(得分:0)

如果你打破了三元表达式,这是非常令人困惑的,但更容易理解。

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:primaryType="sling:OsgiConfig"
    mime.types="[video/x-matroska mkv, video/dvd vob, mymime/type extension]"
/>

x的值将决定while是否继续。

那么x的值就是这样:

x = i+1?--i:j++;

此时(x)将突破循环,因为x = 0 = false。 printf只调用一次,其中x的值为1