2015-10-03 4 views
-3
for(i=0;i++<10;) 
    { 
     printf("%d\n",i); 
    } 

Почему печать с 1 по 10?C Программирование приращения и декремента

Я знаю, что после инкремента происходит после цикла, так почему же он не показывает 0? И почему он показывает 10?

+1

_ «Как я знаю, приращение после события происходит после цикла» _ Нет. Приращение происходит после _statement_. 'i ++ <10' - это один оператор. –

+0

Возможный дубликат [Операторы приращения/уменьшения] [http://stackoverflow.com/questions/21717247/c-increment-decrement-operators) –

ответ

0

Давайте маркировать элементы цикл:

for(/* 1 */ i=0; /* 2 */ i++<10; /* 4 */) 
{ 
    /* 3 */ printf("%d\n",i); 
} 

Вот как вещи играть:

  1. i Инициализировано 0;
  2. Результаты i++ по сравнению с 10; как побочный эффект этого выражения, i увеличивается на 1;
  3. Распечатано обновленное значение i;
  4. Если бы здесь было выражение, оно было бы оценено.

Этапы с 2 по 4 повторяются до тех пор, пока i++ < 10 не примет значение false.

+0

Итак, когда i ++ = 10, условие является ложным (i ++ <10). Тогда почему он печатает обновленное значение i как 10? – azmain

+0

@AIN: Помните, что выражение 'i ++' оценивается значением * current * 'i', а в качестве * побочного эффекта * добавляется 1 к' i'. Итак, представьте себе 'i' значение' 9'. В выражении 'i ++ <10',' i ++ 'оценивается как' 9', поэтому условие истинно и тело цикла выполняется. Однако после того, как выражение было оценено, 'i' теперь имеет значение' 10', и это то, что распечатывается. Поэтому выходные данные варьируются от «1» до «10». –

+0

@AIN: Другим способом написания этого будет 'for (i = 0; i <10;) {i ++; printf ("% d \ n", i); } ' –

0

Нет .. в цикл первого проверяется условие .. и после того, что вы печатаете iFor loop chart

+0

источник изображения с http://www.programiz.com/c-programming/ c-for-loop –

+0

И в этом случае это шаг «тестового выражения», который увеличивает i. – immibis

+0

yes .. 'test expression' делает приращение –

0

Я думаю, что вы ищете является do..while

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

Спасибо, но в соответствии с вашим циклом do..while он печатает от 0 до 10. И мне нужно знать о пояснении цикла. @Pamblam – azmain

Смежные вопросы