Как написать цикл для без переменной? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу написать цикл for без какой-либо переменной.Возможно ли это?

Пример:

for (1; 1 <= 4; ++) {
  printf ("Loop working\n");
}

Ожидаемый результат:

Loop working
Loop working
Loop working
Loop working

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Чтобы завершить цикл, вам нужно сохранить состояние, в котором говорится, в какой точке вы находитесь.

Обычно для этого вы используете переменную цикла.

Вы также можете использовать рекурсию, вв этом случае состояние кодируется по-другому, но все же необходимо:

void loop(int i)
{
    if (i < 4) {
        printf ("Loop working\n");
        loop(++i); // recursive call
    }
}

int main()
{
    loop(0);
}
0 голосов
/ 13 февраля 2019

Вам нужна переменная, чтобы вести счет, но вы можете скрыть ее.

#include <stdio.h>

#define JOIN(a, b) (a ## b)
// WARNING: don't LOOP in the same line
#define LOOP(n) for (unsigned JOIN(HIDDEN, __LINE__) = 0; JOIN(HIDDEN, __LINE__) < n; JOIN(HIDDEN, __LINE__)++)

int main(void) {
    LOOP(4) {
        printf("foo");
        LOOP(2) printf(" bar");
        puts("");
    }
    return 0;
}

См. Код, работающий на ideone

Вывод

foo bar bar
foo bar bar
foo bar bar
foo bar bar
0 голосов
/ 13 февраля 2019

Да, это возможно.

for(; ;);

Но это будет бесконечный цикл.Добавьте оператор break, и он будет выполняться только один раз

for(; ; )
    break;

. Или вы можете использовать инкрементные и условные операторы внутри цикла

int i = 0;

for(; ;){
    printf ("Loop working\n");
    ++i;
    if( i >= 4)
        break;
}
...