Post инкремент в цикле while в C

вот очень простая программа C:

int main()
{
    int i = 0;
    while(i++ < 10)
         printf("%dn", 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 while().
спасибо.

5 ответов


на 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 и не распечатать что-нибудь, потому что цикл вышел из-за этой проверки.


i++ is пост-инкремент и ++i is pre-increment. Post-increment означает, что Предыдущее значение возвращается после увеличения объекта. Pre-increment означает, что объект увеличивается, а затем возвращается. В любом случае, объект увеличивается при оценке его выражения, и поэтому вы не получаете 0 в качестве первого вывода.


вы увеличиваете i после проверки и перед печатью. Либо увеличьте после проверки и печати, либо используйте do while петли:

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

когда цикл while while(i++ < 10) оценивается это проверка значения i, добавление к нему одного и сравнение старый значение 10. Когда вы измените его на while(++i < 10) Он увеличивает значение i перед сравнением нового значения с 10.

в любом случае, однако, к тому времени, когда вы доберетесь до следующего заявления i уже увеличивается.

если вы хотите напечатать от 0 до 9, вы можете попробовать

    while(i < 10)
     printf("%d\n", i++);

вместо. В этом случае значение i увеличивается после предоставление своего первоначального значения printf заявление.


циклы whie проверяют, что условия истинны, а блок и тест

условия false завершают цикл while.

см. о приращении post в while loop ++

void main ()

{

int rmvivek;

clrscr();

функции printf("ënter целочисленные значения от 1 до 10");

scanf ("%d",&rmvivek);

while (10 > = rmvivek++)

{

printf ("значение равно = %d\n", rmvivek);

}

getch ();

}