1. 無限ループ
永遠に続くループ処理。ただし、ある条件で break文で脱出するように作ります。無限ループは一般的にwhile文かfor文を使って記述します。
(1) while文の無限ループ
永遠に続くループ処理。ただし、ある条件で break文で脱出するように作ります。
【書き方】
while (1) {
文;
if (条件式)
break;
文;
}
// -1を入力するまで加算処理を行う例
#include <stdio.h>
int main(void)
{
int n;
int sum = 0;
while (1) { // 無限ループ
scanf("%d", &n);
if (n == -1) // 入力データが -1 なら
break; // ループから脱出
sum = sum + n;
}
printf("sum = %d\n", sum);
return 0;
}
【フローチャート】

(2) forの無限ループ
for文を使って無限ループを記述する場合もあります。
【書き方】
for (;;) {
文;
if (条件式)
break;
文;
}
〇 演習問題
無限ループを用いて次の処理を行いなさい。
1 × 2 = 2、2 × 2 = 4、4 × 2 = 8 のように整数値を順に2倍して いくと何番目に「32767」で表せる範囲を超えるか調べなさい。

【実行結果例】
data = 2
data = 4
data = 8
data = 16
data = 32
data = 64
data = 128
data = 256
data = 512
data = 1024
data = 2048
data = 4096
data = 8192
data = 16384
data = 32768
cnt = 15
解答例
#include <stdio.h>
int main(void)
{
int data = 1;
int cnt = 1;
while (1) {
data *= 2;
printf("data = %d\n", data);
if (data >= 32767) {
break;
}
cnt++;
}
printf("\ncnt = %d\n", cnt);
return 0;
}
2. 数値以外または EOF でループを終了する
これまでの例では「特定の数値が入力されたらループを抜ける」方法を紹介しました。
しかし、すべての数値に意味がある場合もあります。
そのようなときは、数値以外の入力(あるいは EOF)をトリガにしてループを終了できます。
#include <stdio.h>
int main(void)
{
int n;
int sum = 0;
/* 数値を読み取れる限り合計する。
数値以外または EOF でループ終了 */
while (scanf("%d", &n) == 1) {
sum += n;
}
printf("sum = %d\n", sum);
return 0;
}
【実行結果例】
1
2
3
e ← 数値でない入力
sum = 6
※ 水色文字はキーボードからの入力
状況 | 戻り値 | 挙動 |
---|---|---|
整数を 1 個読み取れた | 1 | ループ続行 |
整数に変換できない文字 | 0 | ループ終了 |
入力開始前に EOF | EOF(-1) | ループ終了 |
〇 演習問題
キーボードから10進数以外が入力されるまで次の処理を行いなさい。
- 1を入力 : ”apple” と表示
- 2を入力 : ”banana” と表示
- 3を入力 : ”cherry” と表示
- それ以外を入力: ”???” と表示

【実行結果例】
1~3 の整数値入力(終了条件: 10進数以外)
1
apple
2
banana
3
cherry
4
???
a
※ 水色文字はキーボードからの入力
解答例
#include <stdio.h>
int main(void)
{
int a;
printf("1~3の整数値入力(終了条件:10進数以外)\n" );
while (scanf( "%d", &a ) == 1) {
switch (a) {
case 1:
printf("apple\n");
break;
case 2:
printf("banana\n");
break;
case 3:
printf("cherry\n");
break;
default:
printf("???\n");
break;
}
}
return 0;
}
コメント