プログラムを読むんでいるとたまにwhile(1)、while(0)といった記述を見かけます。
while(1)を使うと無限ループを作れます。do while(1)でも同じです。
while(0)を使うとwhile文内の処理を実行しないコードになります。普通は使いません。
記事の内容
- while(1)の意味(無限ループ)
- while文の無限ループから抜ける方法
- while(0)の意味
while(1)の意味(無限ループ)
while(1)は無限ループになります。do while(1)でも同じです。
以下で理由を解説します。
while文内の処理が実行されるには条件式が成り立つ、つまりTrue(真)である必要があります。
C言語において偽は0、真は0以外の数値を指します。(真偽値について詳しくはこちらの記事で解説しています。)
以下の例ではi<3の値がiの値によって1(真)から0(偽)へ変化することがわかります。
例:
#include <stdio.h> void main() { int i=0; printf("(i<3)=%d\n",i<3); //①i<3の値を出力 while(i<3) { i=i+1; printf("i=%d\n",i); } printf("(i<3)=%d\n",i<3); //②i<3の値を出力 }
実行結果
(i<3)=1
i=1
i=2
i=3
(i<3)=0
上のコードではi<3の値を出力しています。
①の位置ではi=0なので(i<3)=1(真)となります。
よってwhile文内の処理が実行されます。
3ループ目が終わるころにはi=3となっているのでi<3は偽となります。
よってwhile文を抜け、②の位置で(i<3)=0が出力されます。
つまりwhile(1)は条件式が常に真になり、while文内の処理が無限に実行されます。
while(1)の無限ループから抜ける方法
do while(1)でも同じ方法で無限ループから抜けられます。
breakを使う
以下のようにbreakを使えば無限ループから抜け出せます。
例:
#include <stdio.h> void main() { int i=0; while(1) { i=i+1; if(i>3) break; printf("i=%d\n",i); } printf("End"); }
実行結果
i=1
i=2
i=3
End
returnを使う
関数の中でwhile(1)と使っているのであれば、returnで抜けることもできます。
例:
#include <stdio.h> int func(int i) { while(1) { i=i+1; if(i>3) return 0; printf("i=%d\n",i); } } void main() { int i=0; func(i); printf("End"); }
実行結果
i=1
i=2
i=3
End
実行後に気付いたらCtrl+C
プログラム実行後に無限ループになっていることに気付いたらターミナル(実行結果が出てくる場所)を選択した後、「Ctrl」を押しながら「C」を押せばプログラムを中断できます。
while(0)の意味
while(0)は条件式が常に偽なので、while文内の処理は実行されません。
例:
#include <stdio.h> void main() { while(0) { printf("Hello"); } printf("End"); }
実行結果
End
if(0)を使うタイミング
-
C言語・C++でif(0)、if(1)を使うタイミングと利点
if(0)、if(1)って何に使うの?? こんな疑問にお答えします。 記事の内容 if(0)、if(1)はどういう時に使うのか if(0)、if(1)を使う理由 C言語・C++でif(0)、if(1) ...
続きを見る
まとめ
while(1)は無限ループで、抜け出すにはbreakを使います。
while(0)を使うとwhile文内の処理を実行しないコードになります。普通は使いません。
C言語で行き詰まったら…
-
C言語・C++がわからない時に質問できるサイト・サービス5選
C言語を独学で勉強しているけど内容がイマイチわからない。もはや何がわからないのかもわからない。 C++のエラーが解決できない。ググってもわからない。わかる人に解説してほしい。 こんなお悩みにお答えしま ...
続きを見る