Код не оправдывается после использования продолжения в цикле while - PullRequest
0 голосов
/ 28 июня 2019

Я написал следующий код с использованием компилятора, который был настроен для соответствия стандарту c89 с использованием eclipse.

#include <stdio.h>

int main(void) {
    int i=0;
    printf("initial value for variable i is: %d\n",i);
    while (i<3)
    {
        if (i==1) {continue;}
        printf("%d\n",i);
        i++;
    }
    return 0;
}

Проблема в том, что код не исполняется (ошибок вообще нет) иничего не показывает в консоли.При удалении следующей строки кода if (i==1) {continue;} все работает правильно.

1 Ответ

3 голосов
/ 28 июня 2019

Когда i равно 1, его значение не изменяется, поэтому оно остается равным 1 на следующей итерации и на следующей, и ... для перехода от 1 требуется много времени .

Одним из преимуществ цикла for является то, что он объединяет элементы управления цикла в одну строку. Вы бы не увидели проблему с for (i = 0; i < 3; i++) в качестве цикла; continue будет переходить к i++ в элементе управления циклом.

Вы говорите, что используете Eclipse в качестве IDE. Наверное, поэтому вообще ничего не появляется. Его «терминалы» представляются программам как нетерминальные, поэтому ввод / вывод полностью буферизуется (вместо линейной буферизации, как это обычно происходит с выходом терминала). Это, в свою очередь, означает, что ничего не выводится до тех пор, пока буфер не заполнится, вы вызываете fflush(stdout) или программа не останавливается. Это известная проблема с Eclipse. Вы можете вызвать setvbuf(): добавить строку setvbuf(stdout, NULL, _IOLBUF, BUFSIZ); в начале, чтобы убедиться, что буферизация строки действует.

...