記事には広告を含む場合があります。

C言語入門講座

【C言語】while(1)・while(0)の意味とループを抜ける方法

2024年10月11日

おゆ

組み込み系プログラマとして5年働いていた元エンジニアです。得意言語はC言語とC++。本サイトでは学生および新人組み込み系プログラマに向けてプログラミング知識をわかりやすく解説しています。

プログラムを読むんでいるとたまに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<3の値と聞くと不思議な感じがするかと思いますが、C言語ではこのような条件式を書くと条件式が成り立つかが判定され、成り立てば1(真)、成り立たなければ0(偽)に置き換えられます。

①の位置では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)は以下の記事で解説している理由でたまに使うのですが、while(0)は使ったことがありません。正直、while(0)の必要性は感じられません。

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++のエラーが解決できない。ググってもわからない。わかる人に解説してほしい。 こんなお悩みにお答えしま ...

続きを見る

ブログランキング参加中。クリックしてもらえると励みになります。

ブログランキング・にほんブログ村へ

-C言語入門講座