以下语句在C中产生什么输出?

时间:2015-03-04 02:48:00

标签: c loops for-loop indefinite

我预计它会产生:

  

10 5 3 2 1

但是打印

  

10 5 3 2 1 1 1 1 1 1 1 1 1 ...

为什么?

#include <stdio.h>

int main(void)
{
    int i;

    for(i = 10; i >= 1; i /= 2)
        printf("%d ", i++);

    return 0;
}
打印

2,然后添加一个,使其为3,除以2为1.当1等于1时,打印1,然后加1,使其为2,除以2为0.循环应该结束。

3 个答案:

答案 0 :(得分:2)

i为1时,使用printf语句打印它。然后i递增(通过++语句中的printf运算符)。然后执行i /= 2,结果为i = 2 / 2,结果为1。这满足您的条件i >= 1,使其成为无限循环。

答案 1 :(得分:1)

i /= 2变为1时,循环体将打印1并按i递增1。这永远不会让i /= 2的值小于1,因此i的值和循环将无限迭代。

答案 2 :(得分:1)

我不断增加到2并除以2,产生无限循环。