Как вывод на код 9? - PullRequest
       1

Как вывод на код 9?

0 голосов
/ 29 мая 2018
#include <stdio.h>
int main()
{
    int i=0;
    while(i++,i<=8);
    printf("%d\n",i);
    return 0;
}

Почему приращение i выполняется после сравнения в каждом тестовом примере?

Ответы [ 5 ]

0 голосов
/ 29 мая 2018

Увеличение i не выполняется после сравнения в каждом тестовом примере.i++ выполняется первым, а затем выполняется сравнение.

Это потому, что когда выражения разделяются запятыми в C, выражения вычисляются слева направо, а значение последнего выражения становится значениемот всего выражения, разделенного запятыми.

Таким образом, значение

i++,i<=8

на самом деле является значением i<=8, и это сравнение выполняется только после выполнения i++.

Таким образом, цикл while здесь

int i=0;
while(i++,i<=8);

эквивалентен

for(i=1; i<=8; i++);

Следовательно, управление выходит из цикла только тогда, когда i больше 8.Поскольку i увеличивается на 1 на каждой итерации, это означает, что цикл заканчивается, когда i становится 9.

0 голосов
/ 29 мая 2018

Вы запустили i = 0 и, используя цикл while ( i++, i<=8 ), увеличивали его значение до 8, а когда оно увеличилось еще раз i = 9, условие цикла стало false и разрывало цикл с i = 9.И вот почему теперь, когда вы печатаете значение i, оно дает вам 9.

0 голосов
/ 29 мая 2018

Это не так.Ваше условие цикла - i <= 8, оно впервые неверно, когда i достигает 9 (вы увеличиваете i на 1 каждый раз, так что это будет ровно 9).Вот почему он печатает 9.

0 голосов
/ 29 мая 2018

Чтобы достичь оператора print(), цикл while должен завершиться.Условие завершения управляющего выражения должно оцениваться как ложное (или, другими словами, до тех пор, пока управляющее выражение не сравнится равным 0), т. Е. Оно будет ложным только при i <= 8;оценивается как ложное.Для значения i как 9 это происходит.

Следующая строка, значение i, печатается.Итак, вы видите 9.

0 голосов
/ 29 мая 2018

i <= 8 завершается успешно в последний раз, когда i = 8.

На последней итерации выполняется i++, а затем i <= 8 не выполняется, поскольку i = 9.

Примечание.что , является последовательностью , поэтому i++ абсолютно гарантированно будет выполнено до i <= 8. Не так для подобных конструкций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...