コンピュータやスマホなどの処理は、基本的に無限ループだ。
コンピュータの世界では、まとまった処理を永遠に繰り返すことを指す。
最近では、日常会話にも登場する言葉でもある。
例)「この動画好きすぎて無限ループしてる!」 → ずっと見てるの意
無限ループの考え方
スマホなどのイメージで表すとユーザが何かアクションを起こすことを想定して、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 ) y1~5の数値を当ててね! 5
正解!
Replay ? ( y / n ) n
この数あてゲームでは、無限ループを抜けるためにキーボード入力で最後に「N」または[n」が入力されたときとしている。
無限ループで作ると様々な終了条件や分岐がループ内でとれるため、作りながら色々と終了条件を考えたりするのに便利だ。
最初から終了条件を指定してしまう通常のwihile文やfor文に比べるとゲームなどをシンプルにプログラミングできる。
以上、無限ループについてでした。
ぜひ、無限ループを使って何か面白いもの作ってみてください。
コメント