よく使われるループ処理
永遠に続くループ処理。ただし、ある条件で break文で脱出するように作ります。
(例)int n; int sum = 0; while (1) { …無限ループ scanf("%d", &n); if (n == -1) …入力データが -1 なら break; ループから脱出 sum = sum + n; } printf("sum = %d\n", sum);
|
(フローチャート) |
これまでの説明では、特定のデータの入力でループを終了させるようにしてきましたが、どのデータも意味があり、特定のデータが決められない場合があります。そのような場合に、キーボードから「Ctrl+Z」を入力することによりループを終了させることができます。
int n; int sum = 0; while (scanf("%d", &n) != EOF) { …「Ctrl+Z が入力されるまで」という意味 sum = sum + n; } printf("sum = %d\n", sum);
分解すると以下のようになります。
(注) 「EOF」 は、End Of File という意味でファイルの終了を表します。 stdio.h の中で一般に #define EOF -1 とマクロ定義され、値は -1 です。 scanf() は、MS-DOS と Windows の環境では「Ctrl+Z」の入力で EOF を返却しますが、 UNIXの環境では「Ctrl+D」の入力で EOF を返却します。 また、VC++ や BCB などの Windows の C では、 「Ctrl+Z」は「Undo」のショートカットキーになっているためか、 その後の printf() などの出力を打ち消してしまうようです。(2001.6.24 追記) どうやらこの現象はWindows9xとMeのDOS窓のバグ(仕様?)のようです。 WindowsXPやNTでは発生しません。(2002.6.11追記)
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved