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 ();
}