Другие языки программирования и технологии

for or while?c++

Прошу объяснить в чем разница. Сколько читаю я понимаю, что добиться можно одного и того же результата и тем и тем. но как вижу FOR чаще употребляется. и еще, часто вижу вот такое for(;;){...как понять ;;?
заранее всем спасибо!
(;;) -- Ктулху смайлик
for (;;) -- повторять, пока спит Ктулху, то есть, бесконечно
Шутка.

> добиться можно одного и того же результата и тем и тем
Да. Просто в одном случае удобнее использовать for, а в другом while, а в третьем еще один оператор цикла do ...while (используется не так часто, как первые два) .

for (<инициализация>; <условие>; <приращение>)
любая из операций может быть опущена, т. е. мы можем написать:
for (; <условие>; <приращение>)
если все переменные, которые принимают участие в <условие> и <приращении> были инициализированы ранее.

Полную форму for можно переписать через while, как
<инициализация>;
while (<условие>) {
<наш код>
<приращение>;
}

Аналогично, while можно переписать, как for
for (; <условие> ;) {
<наш код>
}

Но, и в том и в другом случае это выглядит коряво.

Чтобы не запутывать возможных читателей вашего кода, которые могут не знать такие тонкости ("как понять ;;?"), рекомендую всегда писать
while (true)

вместо
for (;;)
Азис Касымбеков
Азис Касымбеков
52 101
Лучший ответ
слишком узко мыслишь. . .типа циклы предназначены исключительно для движения в одном направлении. . .

в классическом виде
for-цикл это как "перебор от и до с таким-то шагом в каком-то одном выбранном направлении"
while-цикл это как "выполнять что-то пока не надоест"

пример.
используя for-цикл доехать на лифте с первого до последнего этажа. ну, это понятно. дави каждый раз на каждую последующую кнопку

используя while-цикл доехать на лифте с первого до последнего этажа
while (не задолбало) {
дави на случайно выбранную кнопку.
}

тот факт что в for-цикле не все параметры обязательны не является продуманной крутизной языка который такое позволяет. это просто недоделки, которым нашли применение.
АА
Айдар Амиров
81 152
а еще можно сделать goto
metka:
<код>
goto metka;
Алексей Киктев
Алексей Киктев
43 174
Это просто два одинаковых цикла с маленьким различием: в for удобнее прописывать операции до цикла и после каждой итерации [1]. Например:

$i = 1; //[2]
while($i <= 10)
{
//some code
$i++;
}

Этот цикл подсчитывает количество собственных итераций.
А вот другой пример, который делает абсолютно то же самое:

for($i = 1; $i <= 10; $i++)
{
//some code
}

Результат один и тот же в обоих случаях.
Вот разъяснения к for:
for(операции, которые выполняются до первой итерации; условие; операции, которые выполняются после каждой итерации)

Если не указать "операции, которые выполняются до первой итерации", то до первой итерации ничего происходить не будет:

Если не указать "условие", то цикл будет бесконечным.
Если не указать "операции, которые выполняются после каждой итерации", то после каждой итерации ничего не будет выполняться.
Выходит, если мы сделаем так:
for(;;)
то это будет бесконечный цикл без операций до него и без операций после каждой итерации.
Зачем нужно ";;"? Эти две точки с запятой ставятся ВСЕГДА. Если вы что-то опускаете, все равно оставляйте эту хрень:

for($i = 1;;)
for(;true; $i++)

и т. п.
Цикл for используют чаще, потому что это удобно. Но так желать стоит не всегда. Помните о красоте кода. Если у вас нет первого и третьего параметров, ни к чему использовать for. Ведь у вас будет только условие, не будет операций до цикла и операций после каждой итерации. Зачем тогда писать вот это:

for(;true;)

если можно написать красивее:

while(true)

[1] Итерация - одно прохождение цикла.
[2] Примеры на PHP, так как C++ не знаю. Но тут примерно одно и тоже - это азы.