C言語

【C言語】第2章第9回:無限ループの書き方と使いどころ

無限ループは、特定の条件が成立するまでプログラムを実行し続けるために使用されます。この章では、無限ループの基本的な構造や実用例を詳しく解説し、その効果的な使い方を学びます。

1. 無限ループとは?

無限ループは、終了条件が設定されていない、または常に真となる条件を使用したループです。for文やwhile文で記述できます。

基本構文

for (;;) {
    // 繰り返し処理
}

while (1) {
    // 繰り返し処理
}

上記の構文はどちらも無限ループを実現します。for文では条件を省略し、while文では条件を1(常に真)としています。

2. 無限ループの基本例

以下は、無限ループを用いて特定のメッセージを繰り返し表示するプログラムの例です。

#include <stdio.h>

int main() {
    while (1) { // 無限ループ
        printf("This is an infinite loop.\n");
        break; // ループを終了
    }

    return 0;
}

解説:

  • while (1):条件が常に真であるため、ループが終了しません。
  • break:ループを強制的に終了します。

3. 実用例:ユーザー入力の検証

無限ループは、ユーザーから有効な入力を取得する際に便利です。

例:正の整数を取得

#include <stdio.h>

int main() {
    int number;

    while (1) {
        printf("Enter a positive number: ");
        scanf("%d", &number);

        if (number > 0) {
            printf("You entered: %d\n", number);
            break; // 有効な入力でループを終了
        }

        printf("Invalid input. Please try again.\n");
    }

    return 0;
}

解説:

  • while (1):条件が常に真であるため、ループが終了しません。
  • if (number > 0):有効な入力が得られた場合、break文でループを終了します。

4. 無限ループの使いどころ

無限ループは、以下のようなシナリオで効果的に使用されます:

  • メインループ:ゲームやリアルタイムシステムで、常に更新が必要な場合。
  • 入力待機:ユーザーからの入力を待つ処理。
  • データ受信:ネットワークプログラムで、継続的にデータを受信する場合。

5. 注意点:無限ループの管理

無限ループを設計する際には、以下の点に注意が必要です:

  • ループ終了条件を明確にし、適切にbreak文を使用する。
  • 処理負荷を軽減するため、ループ内で不必要な操作を避ける。
  • デバッグ時に無限ループが意図的であることを明示するコメントを記述。

6. 練習問題

以下の課題に挑戦して、無限ループの使い方を練習してください。

  1. ユーザーに数値を入力させ、その合計を計算するプログラムを作成してください。負の数が入力されたらループを終了します。
  2. 無限ループを使用して、ユーザーが「exit」と入力するまで文字列を出力させるプログラムを作成してください。
  3. ネットワークプログラムを模倣し、無限ループで「データ受信中…」を表示するプログラムを作成してください。ただし、一定の回数後にループを終了します。

7. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int main() {
    int number, sum = 0;

    while (1) {
        printf("Enter a number: ");
        scanf("%d", &number);

        if (number < 0) {
            break; // 負の数でループを終了
        }

        sum += number; // 合計を計算
    }

    printf("Total sum is %d.\n", sum);
    return 0;
}

問2の解答

#include <stdio.h>
#include <string.h>

int main() {
    char input[100];

    while (1) {
        printf("Enter a string (type 'exit' to quit): ");
        scanf("%s", input);

        if (strcmp(input, "exit") == 0) {
            break; // 'exit'でループを終了
        }

        printf("You entered: %s\n", input);
    }

    printf("Program exited.\n");
    return 0;
}

問3の解答

#include <stdio.h>

int main() {
    int count = 0;

    while (1) {
        printf("Receiving data...\n");
        count++;

        if (count == 5) { // 5回表示したら終了
            break;
        }
    }

    return 0;
}

8. まとめ

無限ループは、特定の条件で繰り返し処理を行う必要がある場面で非常に便利です。ただし、適切な終了条件を設けることが重要です。練習問題を通じて、無限ループの設計と管理を習得してください。