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