虽然单独使用一元运算符循环?

时间:2017-05-21 06:14:34

标签: c

循环迭代时,i的值如何变化,如下所示? 我一直无法理解循环条件是否会改变I的值,或者它是否只是检查它并让它传递。

void main()
{
    int i = 31;
    while (i++)
    {
        if (i % 2 == 0)
            i = i / 2;
        if (i % 3 == 0)
            continue;
        else
            i = i - 2;
        printf("%d\n", i);
    }
}

3 个答案:

答案 0 :(得分:1)

在C编程中,*.cpp0,而非零数字(如1,-1等)为false

您可以尝试使用此代码段来了解如何评估条件:

true

while循环的语法:

int result1 = (4 > 6);  // 0
int result2 = (3 != 6); // 1

在您的代码中:

while(<condition>){ // evaluates either 0 or 1
   // body of loop
}

对于后增量运算符while(i++) // initial value of i is 31, hence it is evaluated as true. i++的值在每次传递时继续增加1。仅当i为0(零)时,此循环才会中断/退出。

答案 1 :(得分:1)

这是一个追溯:

On loop 1, i = 32:

2的倍数? (是:i = 16)。 3的倍数? (不:我= 14,打印i)

On loop 2, i = 15:

2的倍数? (不:没有变化)。 3的倍数? (是:没有变化,没有印刷品)

On loop 3, i = 16:

2的倍数? (是:i = 8)。 3的倍数? (不:我= 6,打印我)

On loop 4, i = 7:

2的倍数? (不:没有变化)。 3的倍数? (不:我= 5,打印我)

On loop 5, i = 6:

2的倍数? (是:i = 3)。 3的倍数? (是:没有变化,没有印刷品)

On loop 5, i = 4:

2的倍数? (是:i = 2)。 3的倍数? (不:我= 0,打印我)

停止循环,因为i = 0。

打印输出:14,6,5,0

答案 2 :(得分:-1)

首先检查i的值,然后将其提前1。 如果您输入while(++i),则会先更新i的值,然后再进行检查。

在你的特殊情况下,这并不重要,只是让你知道......