Namespaces
Variants

do-while loop

From cppreference.net

条件 の値がfalseになるまで、 を繰り返し実行します。テストは各反復の後に行われます。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、クラス名はすべて保持されています - セクションタイトル(Syntax、Explanation、Notes、Keywords、Example、References、See also)はC++関連の専門用語として翻訳せずに保持しています - 番号部分はそのまま保持されています - すべての書式設定と構造は元のまま維持されています

構文

attr-spec-seq  (オプション) do statement while ( expression ) ;
attr-spec-seq - (C23) オプションの 属性 リスト。ループ文に適用される。
statement - 任意の 。通常は複合文であり、ループの本体を構成する。
expression - スカラ型 のもの。この式は各反復後に評価され、ゼロと等しい場合にループを終了する。

説明

do - while 文は、 statement ループ本体 とも呼ばれる)が、 expression 制御式 とも呼ばれる)が 0 と等しくなるまで繰り返し実行されることを引き起こします。この繰り返しは、ループ本体が通常に進入された場合でも、 goto によって statement の途中に進入した場合でも関係なく発生します。

expression の評価は、 statement の各実行後(通常に進入した場合も goto によって進入した場合も)に行われます。制御式をループ本体の前に評価する必要がある場合は、 while loop または for loop を使用できます。

ループの実行をある時点で終了する必要がある場合、 break文 を終了文として使用できます。

ループの実行をループ本体の終端で継続する必要がある場合、 continue文 をショートカットとして使用できます。

観測可能な動作(I/O、volatileアクセス、原子操作または同期操作)を一切含まない無限ループを持つプログラムは未定義動作を引き起こします。これにより、コンパイラはループが終了することを証明することなく、すべての観測不可能なループを最適化して除去することが許可されます。唯一の例外は、 expression が定数式であるループです。 do { ... } while ( true ) ; は常に無限ループとなります。

他のすべての選択文および反復文と同様に、 do-while 文は ブロックスコープ を確立します: expression 内で導入された識別子は、文の後にスコープから外れます。

(C99以降)

注記

ブール式とポインタ式は、ループ制御式として頻繁に使用されます。ブール値 false およびあらゆるポインタ型のnullポインタ値は、ゼロと等しいと比較されます。

キーワード

do while

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // 単純な例
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // ループ本体は単一の式文
    while(n < SIZE);
    puts("Array filled!");
    n = 0;
    do
    { // ループ本体は複合文
        printf("%d ", array[n]);
        ++n;
    } while (n < SIZE);
    printf("\n");
    // K&R itoa() のループ。do-while ループは少なくとも1桁が生成されるため使用される
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // 逆順で次の桁を取得
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

出力例:

Array filled!
1 0 1 1 1 1 0 0
4321

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 6.8.6.3 do文 (p: 156)
  • C17規格 (ISO/IEC 9899:2018):
  • 6.8.5.2 do文 (p: 109)
  • C11規格 (ISO/IEC 9899:2011):
  • 6.8.5.2 do文 (p: 151)
  • C99規格 (ISO/IEC 9899:1999):
  • 6.8.5.2 do文 (p: 136)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 3.6.5.2 do文

関連項目

C++ documentation for do - while loop
日本語訳:
C++ documentation for do - while loop
翻訳結果: - "C++ documentation" → 「C++ ドキュメント」 - "for" → 「の」 - "do-while loop" → 「do-while ループ」 HTMLタグ、属性、 タグ内のC++キーワード(do, while)は翻訳せず、元のフォーマットを保持しています。