while loop Выполняет оператор несколько раз,пока значение условия не станет ложным.
Цикл do/while является вариантом цикла while.Этот цикл выполнит блок кода один раз,прежде чем проверить,истинно ли условие,затем он будет повторять цикл до тех пор,пока условие истинно.
Разработчики C++используют циклы для повторения блока кода без необходимости его многократного ввода.Циклы помогают сохранить лаконичность кода и сделать его более читаемым.Цикл while в C++-это тип цикла,который сначала оценивает условие.Если условие истинно,программа выполнит код внутри цикла while.
Основная причина того,что While намного медленнее,заключается в том,что цикл while проверяет условие после каждой итерации,поэтому если вы собираетесь написать этот код,просто используйте вместо него цикл for.
Выполняет оператор несколько раз, пока значение условия не станет false
. Тест проводится перед каждой итерацией.
Syntax
attr(optional)while ( condition) statement |
attr | — | (начиная с C++11) любое количество атрибутов |
condition | — | любое выражение, которое может быть контекстно преобразовано в bool или объявление одной переменной с инициализатором скобок или равно . Это выражение вычисляется перед каждой итерацией, и если оно возвращает false , цикл завершается. Если это объявление, инициализатор вычисляется перед каждой итерацией, и если значение объявленной переменной преобразуется в false , цикл завершается. |
statement | — | любой оператор , обычно составной оператор, который является телом цикла |
Explanation
Является ли оператор составным оператором или нет, он всегда вводит область действия блока . Объявленные в нем переменные видны только в теле цикла, другими словами,
while (--x >= 0) int i; // i goes out of scope
это то же самое.
while (--x >= 0) { int i; } // я выхожу за пределы области видимости
Если условие является объявлением, таким как T t = x
, объявленная переменная находится только в области видимости в теле цикла и уничтожается и воссоздается на каждой итерации, другими словами, такой как цикл эквивалентен.
label: { // начало области действия условия T t = x; if (t) { statement goto label; // вызывает деструктор t } }
Если выполнение цикла необходимо прекратить в какой-то момент, оператор break можно использовать как оператор завершения.
Если выполнение цикла необходимо продолжить в конце тела цикла, оператор continue может использоваться как ярлык.
Notes
Как часть гарантии прямого продвижения C ++ , поведение не определено, если цикл, который не имеет наблюдаемого поведения (не выполняет вызовы функций ввода-вывода, доступа к изменчивым объектам или выполнения атомарных операций или операций синхронизации), не прерывается. Компиляторам разрешено удалять такие циклы.
Keywords
while
.
Example
#include <iostream> int main() { // цикл while с одним оператором int i = 0; while (i < 10) i++; std::cout << i << '\n'; // цикл while с составным оператором int j = 2; while (j < 9) { std::cout << j << ' '; j += 2; } std::cout << '\n'; // цикл while с условием объявления char cstr[] = "Hello"; int k = 0; while (char c = cstr[k++]) std::cout << c; std::cout << '\n'; }
Output:
10 2 4 6 8 Hello
See also
Документация C для while |
C++
-
Variadic arguments
Позволяет функции принимать любое количество дополнительных аргументов.
-
спецификатор виртуальных функций
Спецификатор virtual указывает,что нестатическая функция-член является и поддерживает динамическую диспетчеризацию.
-
Zero-overhead principle
Принцип нулевых накладных расходов-это принцип проектирования,который гласит:В общем случае это означает,что ни одна функция не должна быть добавлена в C++,которая бы налагала какие-либо накладные расходы,будь то время.
-
Zero-initialization
Устанавливает начальное значение объекта на ноль.
- 1
- …
- 2216
- 2217
- 2218
- 2219
- 2220
- …
- 4464
- Next
عفواً، لم نتمكن من العثور على الصفحة التي تبحث عنها.
برجاء المحاولة مرة أخرى للصفحة السابقة أو الانتقال لـمركز المساعدة للمزيد من المعلومات الإنتقال لموجزك الرئيسيOmlouváme se, nemůžeme najít stránku, kterou hledáte. Zkuste se vrátit zpátky na předchozí stránku, nebo se podívejte do našeho Centra nápovědy pro více informací
Přejít do informačního kanáluVi kan desværre ikke finde den side, du leder efter. Gå tilbage til den forrige side, eller besøg Hjælp for at få flere oplysninger
Gå til dit feedDie gewünschte Seite konnte leider nicht gefunden werden. Versuchen Sie, zur vorherigen Seite zurückzukehren, oder besuchen Sie unseren Hilfebereich, um mehr zu erfahren.
Zu Ihrem FeedUh oh, we can’t seem to find the page you’re looking for. Try going back to the previous page or see our Help Center for more information
Go to your feedVaya, parece que no podemos encontrar la página que buscas.
Intenta volver a la página anterior o visita nuestro Centro de ayuda para más información. Ir a tu feedNous ne trouvons pas la page que vous recherchez. Essayez de retourner à la page précédente ou consultez notre assistance clientèle pour plus d’informations
Ouvrez votre filMaaf, sepertinya kami tidak dapat menemukan halaman yang Anda cari. Coba kembali ke halaman sebelumnya atau lihat Pusat Bantuan kami untuk informasi lebih lanjut
Buka feed AndaNon abbiamo trovato la pagina che stai cercando. Prova a tornare alla pagina precedente o visita il nostro Centro assistenza per saperne di più.
Vai al tuo feed申し訳ありません。お探しのページが見つかりません。前のページに戻るか、ヘルプセンターで詳細をご確認ください
フィードに移動원하시는 페이지를 찾을 수 없습니다. 이전 페이지로 돌아가거나 고객센터에서 자세히 알아보세요.
홈으로 가기Harap maaf, kami tidak dapat menemui laman yang ingin anda cari.
Cuba kembali ke laman sebelumnya atau lihat Pusat Bantuan kami untuk maklumat lanjut Pergi ke suapanDe pagina waar u naar op zoek bent, kan niet worden gevonden. Probeer terug te gaan naar de vorige pagina of bezoek het Help Center voor meer informatie
Ga naar uw feedVi finner ikke siden du leter etter. Gå tilbake til forrige side eller besøk vår brukerstøtte for mer informasjon
Gå til din feedNie możemy znaleźć strony, której szukasz. Spróbuj wrócić do poprzedniej strony lub nasze Centrum pomocy, aby uzyskać więcej informacji
Przejdź do swojego kanałuA página que você está procurando não foi encontrada. Volte para a página anterior ou visite nossa Central de Ajuda para mais informações
Voltar para seu feedNe pare rău, nu găsim pagina pe care o căutaţi. Reveniţi la pagina anterioară sau consultaţi Centrul nostru de asistenţă pentru mai multe informaţii
Accesaţi fluxul dvs.Не удаётся найти искомую вами страницу. Вернитесь на предыдущую страницу или посетите страницу нашего справочного центра для получения дополнительной информации.
Перейти к лентеSidan du letar efter hittades inte. Gå tillbaka till föregående sida eller besök vårt Hjälpcenter för mer information
Gå till ditt nyhetsflödeขออภัย ดูเหมือนเราไม่พบหน้าที่คุณกำลังมองหาอยู่ ลองกลับไปที่หน้าเพจก่อน หรือดู ศูนย์ความช่วยเหลือ ของเราสำหรับข้อมูลเพิ่มเติม
ไปที่ฟีดของคุณNaku, mukhang hindi namin mahanap ang pahina na hinahanap mo. Subukang bumalik sa nakaraang pahina o tingnan ang aming Help Center para sa higit pang impormasyon
Pumunta sa iyong feedAradığınız sayfa bulunamadı. Önceki sayfaya geri dönün veya daha fazla bilgi için Yardım Merkezimizi görüntüleyin
Haber akışınıza gidin抱歉,无法找到页面。试试返回到前一页,或前往帮助中心了解更多信息
前往动态汇总我們好像找不到該頁面。請回到上一頁或前往說明中心來進一步瞭解
前往首頁動態о делах — PowerShell | Microsoft Узнайте
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
- 2 минуты на чтение
Краткое описание
Запуск списка операторов один или несколько раз в зависимости от Пока
или До
состояние.
Подробное описание
Ключевое слово Do
работает с ключевым словом While
или ключевым словом Before
для запуска
операторы в блоке скрипта при соблюдении условия. В отличие от родственных Во время цикла
блок скрипта в цикле Do
всегда выполняется хотя бы один раз.
Цикл Do-While является разновидностью цикла While
. В цикле Do-While условие оценивается после запуска блока скрипта. Как и в цикле while,
блок сценария повторяется до тех пор, пока условие оценивается как истинное.
Подобно циклу Do-While , цикл Do-Until всегда выполняется хотя бы один раз. перед оценкой состояния. Однако блок скрипта работает только пока условие ложно.
Ключевые слова управления потоком Continue
и Break
можно использовать в Do-While цикла или в цикле Do-Until .
Синтаксис
Ниже показан синтаксис оператора Do-While :
do {<список операторов>} while (<условие>)
Ниже показан синтаксис оператора Do-Until :
do {<список операторов>} до (<условие>)
Список инструкций содержит одну или несколько инструкций, которые выполняются каждый раз, когда цикл вводится или повторяется.
Условная часть инструкции принимает значение true или false. Для большего информацию о том, как оцениваются логические значения, см. about_Booleans.
Пример
Следующий пример оператора Do
подсчитывает элементы в массиве, пока не
достигает элемента со значением 0,
ПС> $х = 1,2,78,0 PS> сделать { $count++; $а++; } пока ($x[$a] -ne 0) PS> количество долларов 3
В следующем примере используется ключевое слово До
. Обратите внимание, что не равно
оператор ( -ne
) заменяется оператором равенства ( -eq
).
ПС> $х = 1,2,78,0 PS> сделать { $count++; $а++; } до ($x[$a] -eq 0) PS> количество долларов 3
В следующем примере записываются все значения массива, пропуская любое значение что меньше нуля.
сделать { если ($x[$a] -lt 0) {продолжить} Хост записи $x[$a] } пока (++$a -lt 10)
См. также
- about_Booleans
- about_Break
- about_Continue
- об_операторах
- about_Assignment_Operators
- about_Comparison_Operators
- о_пока
Обратная связь
Просмотреть все отзывы о странице
do..while
См. do…until в Tcl
См. также while…wend в Tcl
См. также control::do body ?option test? , управление — Процедуры для структур потока управления (Tcllib).
Есть разница между do..until и while..wend. По do..пока оператор не будет выполнен хотя бы один раз
Мы можем смоделировать такое поведение в Tcl:
while 1 { # ..заявление если {!выражение} сломается }
DKF: Попробуйте это:
proc do {тело ключевого слова} { если {$ключевое слово эквивалентно "пока"} { установить выражение "!($expression)" } elseif {$ключевое слово пе "до"} { return -code error "неизвестное ключевое слово \"$keyword\": должно быть до или пока" } установить условие [выражение списка $выражение] пока 1 { уровень 1 $тело если {[уровень 1 $условие]} { перерыв } } возвращаться }
fredderic: Как насчет этой версии:
proc do {команда во время проверки} { если { $ в то время как "до" } { установить тест "!($test)" } elseif { $while ne "пока" } { ошибка "неизвестное ключевое слово \"$while\": должно быть пока или до" } установить код [поймать результат {uplevel 1 $command}] переключатель -точный $код { 0–4 {} 3 {возврат} по умолчанию {код возврата $код $результат} } установить код [поймать {uplevel 1 [список, пока ${bool}($test) $command]} результат] код возврата $код $результат }
Это версия, которую я написал некоторое время назад, дополненная более аккуратной проверкой ключевых слов DKF. Преимущество в том, что первый проход выполняется вручную, а остальная часть цикла выполняется непосредственно на месте. Я думаю, что обработке catch может потребоваться немного внимания, и лично мне нравится возвращать результат последней итерации тела.
wdb Это мой вариант, который позволяет использовать while, а также самоопределяемые конструкции, такие как until:
proc ::do {code while cond} { # nicht-abweisende Schleife $код уровня 1 uplevel 1 [список $while $cond $code] }
AMG: Вот пример wdb, переписанный для использования [tailcall try] вместо [uplevel]:
proc do {code while cond} { tailcall try $code\n[список $while $cond $code] }
Это дает правильное поведение, даже если $code содержит [return], [error], [throw] и т.п.
АПН: Но не с [перерывом]. В отличие от версии dkf, версия wdb и AMG не будут работать с [break] и [continue].
% набор i 2 2 % делать {помещает $i; перерыв} в то время как {[incr i -1]} 2 вызывается "break" вне цикла
PYK 06. 09.2016: Тогда как насчет этого:
proc do {code while cond} { хвостовой вызов :: пока 1 " :: попробуйте [список $code\n[список $while $cond $code]] ::перерыв " }
AMG: В качестве примера [tcl::unsupported::assemble] мне было бы интересно увидеть байт-кодированную команду [do..while].
Последнее, что я проверял, байт-код для [пока] начинается с перехода в конец, непосредственно перед проверкой на завершение, и имеет тело скрипта в середине. Тест завершения возвращается к началу тела скрипта, если можно продолжать цикл.
Единственным отличием байт-кода для [do..while] будет отсутствие начального перехода.
Давайте сделаем это из бетона. Вот байт-код для while {$x} {incr x -1}:
% tcl::unsupported::disassemble script {while {$x} {incr x -1}} ByteCode 0x000000000299F130, refCt 1, эпоха 16, интервал 0x00000000025E65B0 (эпоха 16) Источник "пока {$x} {incr x -1}" Cmds 2, src 22, inst 25, litObjs 2, aux 0, stkDepth 1, code/src 0.