如何输出到代码9?

时间:2018-05-29 12:58:51

标签: c while-loop

#include <stdio.h>
int main()
{
    int i=0;
    while(i++,i<=8);
    printf("%d\n",i);
    return 0;
}

为什么在每个测试用例的比较后完成i的增量?

5 个答案:

答案 0 :(得分:8)

i = 8最后一次成功i++

在上一次迭代中,i <= 8被执行,然后i = 9失败,因为,

请注意,i++sequence point,因此i <= 8绝对保证在i <= 8之前执行。 Not so for similar constructs.

答案 1 :(得分:2)

不是。你的循环条件是i,当i达到9时,它首先是非真的(你每次将/** Evergreen browsers require these. **/ // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. import 'core-js/es7/reflect'; 递增1,所以它恰好是9)。这就是它打印9的原因。

答案 2 :(得分:2)

要访问print()语句,while循环必须结束。终止条件,控制表达式应该评估为假(或者换句话说,直到控制表达式比较等于0),即,仅当i <= 8时它才会为假。评估为假。如果i的值为9,则会发生这种情况。

下一行打印i的值。所以,你看到9

答案 3 :(得分:1)

在每个测试用例中进行比较后,未完成i的增量。首先执行i++,之后进行比较。

这是因为当在C中使用逗号分隔表达式时,表达式从左到右进行计算,最后一个表达式的值变为以逗号分隔的总表达式的值。

所以

的价值
i++,i<=8

实际上是i<=8的值,只有在i++执行后才能进行比较。

所以这里的while循环

int i=0;
while(i++,i<=8);

相当于

for(i=0; i<=8; i++);

因此,仅当i大于8时,控件才会退出循环。由于i在每次迭代时增加1,这意味着当i变为9时,循环结束。

答案 4 :(得分:0)

您开始使用m_pCurrentUser并使用i = 0循环,您将其值增加到while ( i++, i<=8 ),并且当它再次增加8时,则循环条件变为i = 9并使用false打破循环。这就是为什么现在,当你打印i = 9的价值时,它给了你9个。