繰り返し処理

[C言語] do-while文のループをbreak文で抜ける方法

C言語におけるdo-while文は、少なくとも一度はループ内のコードを実行する制御構造です。

このループを途中で終了させたい場合、break文を使用します。

break文は、ループ内の任意の位置に配置でき、実行されるとdo-whileループを即座に終了し、ループの後のコードに制御が移ります。

これにより、特定の条件が満たされたときにループを抜けることが可能です。

do-while文でのbreak文の使用方法

do-while文内でbreak文を使う理由

do-while文は、少なくとも一度はループ内の処理を実行することが保証されているループ構造です。

しかし、特定の条件が満たされた場合にループを途中で終了させたい場合があります。

このような場合にbreak文を使用することで、ループを強制的に終了させることができます。

break文を使う理由は以下の通りです。

  • 条件に応じた柔軟なループ終了: ループの途中で特定の条件が満たされたときに、即座にループを終了させることができます。
  • 無限ループの回避: 条件が複雑で、通常のループ終了条件では対応できない場合に、break文を使って無限ループを防ぐことができます。
  • コードの可読性向上: break文を使うことで、ループ終了条件を明示的に示すことができ、コードの可読性が向上します。

break文を使ったdo-while文の例

以下に、do-while文とbreak文を組み合わせたサンプルコードを示します。

この例では、ユーザーからの入力を受け取り、特定の条件でループを終了します。

#include <stdio.h>
int main() {
    int number;
    do {
        printf("正の整数を入力してください(0で終了):");
        scanf("%d", &number);
        if (number == 0) {
            // 入力が0の場合、ループを終了
            break;
        }
        printf("入力された数値は %d です。\n", number);
    } while (1); // 無限ループ
    printf("プログラムを終了します。\n");
    return 0;
}
正の整数を入力してください(0で終了):5
入力された数値は 5 です。
正の整数を入力してください(0で終了):3
入力された数値は 3 です。
正の整数を入力してください(0で終了):0
プログラムを終了します。

このプログラムでは、ユーザーが0を入力するまで数値を入力し続けることができます。

0が入力されると、break文によってループが終了し、プログラムが終了します。

break文を使う際の注意点

break文を使用する際には、以下の点に注意する必要があります。

  • ループの構造を理解する: break文は最も内側のループを終了させるため、ネストされたループ内で使用する場合は、どのループが終了するのかを明確に理解しておく必要があります。
  • コードの可読性: break文を多用すると、ループの終了条件が分かりにくくなることがあります。

必要以上に使用しないようにし、コードの可読性を保つことが重要です。

  • 無限ループの防止: break文を使って無限ループを制御する場合、break文が確実に実行されるように条件を正しく設定することが重要です。

条件が誤っていると、意図しない無限ループが発生する可能性があります。

実践例:do-while文とbreak文の組み合わせ

ユーザー入力を用いたループの終了

ユーザーからの入力を受け取り、特定の入力があった場合にループを終了するプログラムを作成することができます。

以下の例では、ユーザーが exit と入力するまで文字列を入力し続けるプログラムを示します。

#include <stdio.h>
#include <string.h>
int main() {
    char input[100];
    do {
        printf("文字列を入力してください('exit'で終了):");
        scanf("%s", input);
        if (strcmp(input, "exit") == 0) {
            // 入力が'exit'の場合、ループを終了
            break;
        }
        printf("入力された文字列は %s です。\n", input);
    } while (1); // 無限ループ
    printf("プログラムを終了します。\n");
    return 0;
}

このプログラムでは、ユーザーが exit と入力するまで、入力された文字列を表示し続けます。

exit が入力されると、break文によってループが終了します。

特定条件でループを抜けるプログラム

特定の条件が満たされたときにループを終了するプログラムを作成することも可能です。

以下の例では、ランダムな数値を生成し、特定の数値が生成されたときにループを終了します。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int number;
    srand(time(0)); // 乱数の種を初期化
    do {
        number = rand() % 10; // 0から9の乱数を生成
        printf("生成された数値は %d です。\n", number);
        if (number == 5) {
            // 生成された数値が5の場合、ループを終了
            break;
        }
    } while (1); // 無限ループ
    printf("5が生成されたため、プログラムを終了します。\n");
    return 0;
}

このプログラムでは、0から9の乱数を生成し、5が生成されたときにbreak文でループを終了します。

無限ループからの脱出

do-while文を使った無限ループから脱出する方法として、break文を使用することができます。

以下の例では、カウンタを使用して特定の回数でループを終了します。

#include <stdio.h>
int main() {
    int count = 0;
    do {
        printf("ループ回数: %d\n", count);
        count++;
        if (count >= 10) {
            // カウンタが10以上になったらループを終了
            break;
        }
    } while (1); // 無限ループ
    printf("10回ループしたため、プログラムを終了します。\n");
    return 0;
}

このプログラムでは、カウンタが10に達したときにbreak文でループを終了します。

無限ループを意図的に使用し、break文で制御することで、特定の条件でループを終了させることができます。

応用例

ネストされたループでのbreak文の使用

ネストされたループ内でbreak文を使用する場合、break文は最も内側のループを終了させます。

以下の例では、二重ループを使用して、特定の条件で内側のループを終了させる方法を示します。

#include <stdio.h>
int main() {
    for (int i = 0; i < 3; i++) {
        printf("外側ループ i = %d\n", i);
        int j = 0;
        do {
            printf("  内側ループ j = %d\n", j);
            if (j == 2) {
                // jが2の場合、内側のループを終了
                break;
            }
            j++;
        } while (1); // 内側の無限ループ
    }
    printf("プログラムを終了します。\n");
    return 0;
}

このプログラムでは、内側のdo-whileループがj == 2のときに終了しますが、外側のforループは継続します。

break文は最も内側のループにのみ影響を与えることに注意してください。

複数のbreak文を使った複雑な条件分岐

複数のbreak文を使用して、複雑な条件分岐を実現することができます。

以下の例では、複数の条件に基づいてループを終了する方法を示します。

#include <stdio.h>
int main() {
    int number;
    do {
        printf("数値を入力してください(負の数または100で終了):");
        scanf("%d", &number);
        if (number < 0) {
            // 負の数が入力された場合、ループを終了
            break;
        }
        if (number == 100) {
            // 100が入力された場合、ループを終了
            break;
        }
        printf("入力された数値は %d です。\n", number);
    } while (1); // 無限ループ
    printf("プログラムを終了します。\n");
    return 0;
}

このプログラムでは、ユーザーが負の数または100を入力したときにbreak文でループを終了します。

複数のbreak文を使用することで、異なる条件に基づいてループを終了させることができます。

do-while文とbreak文を用いたメニュー選択システム

do-while文とbreak文を組み合わせて、ユーザーが選択するメニューシステムを作成することができます。

以下の例では、簡単なメニューを表示し、ユーザーの選択に応じて処理を行います。

#include <stdio.h>
int main() {
    int choice;
    do {
        printf("メニューを選択してください:\n");
        printf("1. オプション1\n");
        printf("2. オプション2\n");
        printf("3. 終了\n");
        printf("選択: ");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                printf("オプション1が選択されました。\n");
                break;
            case 2:
                printf("オプション2が選択されました。\n");
                break;
            case 3:
                printf("終了が選択されました。\n");
                // 終了が選択された場合、ループを終了
                break;
            default:
                printf("無効な選択です。もう一度選択してください。\n");
        }
        if (choice == 3) {
            break;
        }
    } while (1); // 無限ループ
    printf("プログラムを終了します。\n");
    return 0;
}

このプログラムでは、ユーザーがメニューから「終了」を選択するまで、メニューを表示し続けます。

「終了」が選択されると、break文によってループが終了します。

メニュー選択システムを作成する際に、do-while文とbreak文を組み合わせることで、ユーザーの選択に応じた柔軟な処理が可能になります。

まとめ

do-while文とbreak文を組み合わせることで、柔軟なループ制御が可能になります。

この記事では、do-while文でのbreak文の使用方法や実践例、応用例について詳しく解説しました。

これらの知識を活用して、より効率的で読みやすいコードを書くことを目指しましょう。

関連記事

Back to top button