While do с: Циклы в C++ — while, for и do while

Содержание

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

LinkedIn

選擇語言Bahasa Indonesia (Bahasa Indonesia)Bahasa Malaysia (Malay)Čeština (Czech)Dansk (Danish)Deutsch (German)English (English)Español (Spanish)繁體中文 (Chinese (Traditional))Français (French)한국어 (Korean)Italiano (Italian)简体中文 (Chinese (Simplified))Nederlands (Dutch)日本語 (Japanese)Norsk (Norwegian)Polski (Polish)Português (Portuguese)Română (Romanian)Русский (Russian)Svenska (Swedish)Tagalog (Tagalog)ภาษาไทย (Thai)Türkçe (Turkish)العربية (Arabic)

عفواً، لم نتمكن من العثور على الصفحة التي تبحث عنها.

برجاء المحاولة مرة أخرى للصفحة السابقة أو الانتقال لـمركز المساعدة للمزيد من المعلومات الإنتقال لموجزك الرئيسي

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álu

Vi 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 feed

Die 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 Feed

Uh 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 feed

Vaya, 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 feed

Nous 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 fil

Maaf, 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 Anda

Non 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 suapan

De 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 feed

Vi finner ikke siden du leter etter. Gå tilbake til forrige side eller besøk vår brukerstøtte for mer informasjon

Gå til din feed

Nie 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łu

A 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 feed

Ne 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 feed

Aradığı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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *