Прошу объяснить в чем разница. Сколько читаю я понимаю, что добиться можно одного и того же результата и тем и тем. но как вижу FOR чаще употребляется. и еще, часто вижу вот такое for(;;){...как понять ;;?
заранее всем спасибо!
Другие языки программирования и технологии
for or while?c++
(;;) -- Ктулху смайлик
for (;;) -- повторять, пока спит Ктулху, то есть, бесконечно
Шутка.
> добиться можно одного и того же результата и тем и тем
Да. Просто в одном случае удобнее использовать for, а в другом while, а в третьем еще один оператор цикла do ...while (используется не так часто, как первые два) .
for (<инициализация>; <условие>; <приращение>)
любая из операций может быть опущена, т. е. мы можем написать:
for (; <условие>; <приращение>)
если все переменные, которые принимают участие в <условие> и <приращении> были инициализированы ранее.
Полную форму for можно переписать через while, как
<инициализация>;
while (<условие>) {
<наш код>
<приращение>;
}
Аналогично, while можно переписать, как for
for (; <условие> ;) {
<наш код>
}
Но, и в том и в другом случае это выглядит коряво.
Чтобы не запутывать возможных читателей вашего кода, которые могут не знать такие тонкости ("как понять ;;?"), рекомендую всегда писать
while (true)
вместо
for (;;)
for (;;) -- повторять, пока спит Ктулху, то есть, бесконечно
Шутка.
> добиться можно одного и того же результата и тем и тем
Да. Просто в одном случае удобнее использовать for, а в другом while, а в третьем еще один оператор цикла do ...while (используется не так часто, как первые два) .
for (<инициализация>; <условие>; <приращение>)
любая из операций может быть опущена, т. е. мы можем написать:
for (; <условие>; <приращение>)
если все переменные, которые принимают участие в <условие> и <приращении> были инициализированы ранее.
Полную форму for можно переписать через while, как
<инициализация>;
while (<условие>) {
<наш код>
<приращение>;
}
Аналогично, while можно переписать, как for
for (; <условие> ;) {
<наш код>
}
Но, и в том и в другом случае это выглядит коряво.
Чтобы не запутывать возможных читателей вашего кода, которые могут не знать такие тонкости ("как понять ;;?"), рекомендую всегда писать
while (true)
вместо
for (;;)
слишком узко мыслишь. . .типа циклы предназначены исключительно для движения в одном направлении. . .
в классическом виде
for-цикл это как "перебор от и до с таким-то шагом в каком-то одном выбранном направлении"
while-цикл это как "выполнять что-то пока не надоест"
пример.
используя for-цикл доехать на лифте с первого до последнего этажа. ну, это понятно. дави каждый раз на каждую последующую кнопку
используя while-цикл доехать на лифте с первого до последнего этажа
while (не задолбало) {
дави на случайно выбранную кнопку.
}
тот факт что в for-цикле не все параметры обязательны не является продуманной крутизной языка который такое позволяет. это просто недоделки, которым нашли применение.
в классическом виде
for-цикл это как "перебор от и до с таким-то шагом в каком-то одном выбранном направлении"
while-цикл это как "выполнять что-то пока не надоест"
пример.
используя for-цикл доехать на лифте с первого до последнего этажа. ну, это понятно. дави каждый раз на каждую последующую кнопку
используя while-цикл доехать на лифте с первого до последнего этажа
while (не задолбало) {
дави на случайно выбранную кнопку.
}
тот факт что в for-цикле не все параметры обязательны не является продуманной крутизной языка который такое позволяет. это просто недоделки, которым нашли применение.
а еще можно сделать goto
metka:
<код>
goto metka;
metka:
<код>
goto metka;
Это просто два одинаковых цикла с маленьким различием: в 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++ не знаю. Но тут примерно одно и тоже - это азы.
$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++ не знаю. Но тут примерно одно и тоже - это азы.
Похожие вопросы
- for и while всегда обрабатывают формулы? С++
- Помогите пожалуйста разобраться с циклом while c++
- С++, Чем отличаеться цикл for, от while?
- Какой цикл может продолжаться бесконечно долго for\foreach\while ? (PHP) И почему?
- for и while Преимущества и недостатки каждого в той или иной ситуации?
- Азы C++: "while" заменяем на "for"
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Помогите с кодом C#. Нужно удалять из строк начальные пробелы с помощью while, if, for, без специальных методов
- Паскаль. For, while, repeat, until, min/max, div/mod.
- C#.Цикл while и метод ReadLine()