在C中while循环中的后递增

时间:2014-08-27 23:49:56

标签: c while-loop post-increment pre-increment

这是一个非常简单的C程序:

int main()
{
    int i = 0;
    while(i++ < 10)
         printf("%d\n", i);

    return 0;
}

结果是:

1
2
3
4
5
6
7
8
9
10

为什么0不是第一个打印的数字? 如果我将i++替换为++i,我会得到这个:

1
2
3
4
5
6
7
8
9

对于i++++i,第一个数字为1。 我希望在循环0中看到while()后期增量。
谢谢。

5 个答案:

答案 0 :(得分:9)

i++(和++i)是while表达式评估的一部分,在打印之前发生。这意味着它最初将始终打印1

i++++i变体之间的唯一区别是增量发生在表达式本身内部,这会影响打印的最终值。每个的等效伪代码是:

while(i++ < 10)            while i < 10:
                               i = i + 1
    printf("%d\n", i);         print i
                           i = i + 1

                           i = i + 1
while(++i < 10)            while i < 10:
    printf("%d\n", i);         print i
                               i = i + 1

让我们说i达到9。使用i++ < 10,它会在9 < 10表达式之前使用while,然后在打印前将i增加到10。因此检查使用9然后打印10。

使用++i < 10,首先递增i ,然后使用10 < 10作为while表达式。因此,检查使用10并且不会打印任何内容,因为该循环因为该检查而退出。

答案 1 :(得分:2)

i++ 后增量++i 预增量。后递增意味着在递增对象后返回先前的值。预增量意味着对象递增然后返回。无论哪种方式,对象在评估其表达式时都会递增,这就是为什么你不能将0作为第一个输出。

答案 2 :(得分:0)

在检查之后和打印之前增加i。在检查和打印后递增,或使用do while循环:

int main()
{
    int i = 0;
    do {
        printf("%d\n", i);
    } while(i++ < 10);
    return 0;
}

答案 3 :(得分:-1)

当评估while循环while(i++ < 10)时,它正在检查i的值,向其中添加一个,并将值与10进行比较。当您将其更改为{{1在将新值与10比较之前,它会增加while(++i < 10)的值。

无论哪种方式,当你到达下一个语句i已经增加时。

如果您想从0到9打印,可以尝试

i

代替。在这种情况下,{/ 1}}的值在将其原始值提供给 while(i < 10) printf("%d\n", i++); 语句后递增

答案 4 :(得分:-2)

在阻止并测试

时检查条件是否为真

条件为false终止while循环。

查看while循环++中的帖子增量

void main()

{

int rmvivek;

clrscr();

printf(“输入整数值1到10”);

的scanf( “%d”,&安培; rmvivek);

while(10&gt; = rmvivek ++)

{

printf(“值为=%d \ n”,rmvivek);

}

的getch();

}