Использование C
Основная предпосылка заключается в том, что цикл while
можно переписать как цикл for
. Такие как
init;
while (conditional) {
statement;
modify;
}
Переписывается как;
for ( init; conditional; modify ) {
statements;
}
Вопрос основан на том, что операторы init
и modify
перемещаются в цикл for
, а цикл for
не просто является
init;
for (; conditional; ) {
modify;
}
Но это вопрос с подвохом. Это неверно из-за внутреннего контроля потока, который может включать statements;
. Из C Программирование: современный подход, 2-е издание , вы можете увидеть пример на странице 119,
n = 0;
sum = 0;
while ( n < 10 ) {
scanf("%d", &i);
if ( i == 0 )
continue;
sum += i;
n++;
}
Это не может быть переписано как for
как цикл,
sum = 0;
for (n = 0; n < 10; n++ ) {
scanf("%d", &i);
if ( i == 0 )
continue;
sum += i;
}
Почему, поскольку ", когда i
равно 0
, исходный цикл не увеличивается n
, а новый цикл увеличивается.
И это, по сути, сводится к улову,
Явное управление потоком внутри цикла while
разрешает выполнение, которое цикл for
(с внутренними операторами init;
и modify;
) не может воссоздать.