C初級:無限ループについて

C言語初級カテゴリのロゴ画像C言語初級
スポンサーリンク

コンピュータやスマホなどの処理は、基本的に無限ループだ。

無限ループとは?

コンピュータの世界では、まとまった処理を永遠に繰り返すことを指す。
最近では、日常会話にも登場する言葉でもある。
例)「この動画好きすぎて無限ループしてる!」 → ずっと見てるの意

スポンサーリンク

無限ループの考え方

スマホなどのイメージで表すとユーザが何かアクションを起こすことを想定して、1秒間に60回ほどスマホの画面をスワイプしたか、とかアイコンをタッチしたか・・・などなどいつまでも無限にチェックしている、と考えてもいい。

スマホなどのOS(=オペレーティング・システム)は、iPhoneであれば、iOS、Android端末であれば、Android OSが搭載されている。
これらのOSの役割は、無限ループによってユーザからのアクションを監視することが基本である。無限ループで無い場合、どうなるかと言うと、今見ていた画面が消えて何も操作出来なくなってしまうだろう。(この場合、画面が消えるというのは、バッテリー節約機能で画面が暗くなることではない)

ユーザがいつアクションを起こすか、コンピュータは事前に感知できないから無限ループでずっと処理を継続しているのだ。

ついでに言えば、ゲームソフトも無限ループが基本になって動いている。

C言語での無限ループ記述方法

C言語での無限ループ記述方法は、主に以下の2つだ。

while文による無限ループの書き方

while(1){
	printf("時");
}

for文による無限ループの書き方

for(;;){
	printf("時");
}

while文では、条件を「1」すなわちにすることで、無限ループとなる。もちろん0以外の数であればC言語の場合、となるので、無限ループとなる。
for文では、条件を何も記述しないことで無限ループとしている。

無限ループを抜ける

無限ループは、ある条件下で抜けることが基本だ。
これには基本的にif文break文を使う。

10までカウントしたらループを抜ける無限ループ

/* 無限ループを抜ける */
#include <stdio.h>
int main(void)
{
	int i = 0;
	
	while(1){
		printf("%3d", i);
		if(i >= 10) break;
		i++;
	}
	
	return 0;
}

実行結果

0 1 2 3 4 5 6 7 8 9 10

無限ループを使った数あてゲーム

簡単な数あてゲームに無限ループを利用するとこんな感じになる。

kazuate.c

/* 30kazuate.c 数当てゲーム */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 5

int main(void)
{
	int iCom, iYou;
	char iYesNo;
	
	while(1) {	/* 無限ループ */
		srand ( (unsigned) time (NULL) ) ;
		
		iCom = rand() % MAX + 1;
		
		printf("\n1~%dの数値を当ててね! ", MAX) ;
		scanf("%d", &iYou);
		rewind(stdin);	/* ENTERキー誤動作のため追加 */

		if (iYou == iCom) {
			printf("\n正解!\n") ;
		}
		else {
			printf("\n残念!\n正解は %d でした。\n", iCom) ;
		}
		
		printf("Re play ? ( y / n ) ") ;
		scanf("%c", &iYesNo);
		rewind(stdin);	/* ENTERキー誤動作のため追加 */
		
		if ( iYesNo == 'n' || iYesNo == 'N' ) {
			break ;
		}
	}
	printf("\n\n\nSee You!") ;

	return 0;
}

実行イメージ

1~5の数値を当ててね! 4

残念!
正解は 5 でした。
Replay ? ( y / n ) y

1~5の数値を当ててね! 5

正解!
Replay ? ( y / n ) n

この数あてゲームでは、無限ループを抜けるためにキーボード入力で最後に「N」または[n」が入力されたときとしている。

無限ループで作ると様々な終了条件や分岐がループ内でとれるため、作りながら色々と終了条件を考えたりするのに便利だ。
最初から終了条件を指定してしまう通常のwihile文やfor文に比べるとゲームなどをシンプルにプログラミングできる。

以上、無限ループについてでした。
ぜひ、無限ループを使って何か面白いもの作ってみてください。

コメント