スライドショー

【C言語入門】while文とdo-while文の使い方(break、continue文)

while文って使ってますか?

ある条件がtrueであれば処理を繰り返したい場合に使用します。

またC言語では「do-while」構文で使ったり、「break」句や「continue」句を使って必要のない処理を省略するなど処理を制御することもできます。

この記事では、while文について

  • while文とは
  • while文の使い方について
  • do-while文の使い方について
  • breakやcontinueを使ってループを制御する方法
  • 条件式が複数の場合
  • while(1)で無限ループを作成


など基本的な内容から、応用的な使い方についても解説していきます。

今回はwhile文について、使い方をわかりやすく解説します!

while文とは

while文とは冒頭でも述べましたが、ある条件がtrueであれば処理を繰り返したい場合に使用します。

しかし条件が変わらなければ処理を続けることになります。

条件が変わった時点で処理を終了してループから抜けなければ、必要のない処理を続けることになりムダが発生してしまいます。

そんな場合には「break」句や「continue」句を使って、不要な処理をスキップするなどの処理の制御を行います。

これらの使い方について詳しく説明していきます。

while文の使い方

while文は以下のように記述します。

while(条件式) {
    処理
}

サンプルコードで確認していきましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    while(i < 3) {
        printf("%d回目の処理です\n", i + 1);
        i++;
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードではint型の変数「i」が3未満であれば処理を繰り返します。

1回ごとの処理で変数「i」に1ずつ加算する処理を行っていますので、3回処理を繰り返すと条件を満たさなくなり、while文の繰り返しループを抜けて全ての処理が終了します。

ちなみに、while文は条件式が初めからfalseの場合にはブロック内の処理は1度も行われず、ブロック外の次の処理に移行します。

do-while文の使い方

次にdo-while文の使い方をみていきましょう。

do-while文は以下のように記述します。

do {
    処理
} while (条件式);

while文do-while文の違いは、条件式が初めからfalseの場合にwhile文ではブロック内の処理が1度も行われないのに対して、do-while文ではブロック内の処理が1度は行われる点です。

do-while文の使い方をサンプルコードで確認していきましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    do {
        printf("%d回目の処理です\n", i + 1);
        i++;
    } while(i < 3);
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

do-while文の場合は処理を先に記述し、繰り返しの条件を処理の後に記述します。

ループを制御する方法

「break」句や「continue」句を使って、処理をスキップする制御方法についてみていきましょう。

breakでループを抜ける方法

「break」句に到達すると、ループ内のそれ以降の処理は行わずにループ外の次の処理に移ります。

サンプルコードで確認していきましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    while(i < 5) {
        if(i + 1 > 3) {
            break;
        }
        printf("%d回目の処理です\n", i + 1);
        i++;
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードのwhile文の条件では、int型の変数「i」が5未満であれば処理を繰り返します。

しかし実行結果を確認すると途中で処理が行われなくなり、ループ外の処理に移行しています。

これは変数「i」が「i + 1 > 3」の条件を満たし「break」句に達したためで、それ以降のループ内の処理は実行されていません。

continueで処理をスキップする方法

「continue」句に到達するとそれ以降のループの処理は行われず、ループの最初の処理から再び実行されます。

サンプルコードで確認していきましょう。

#include <stdio.h>

int main(void) {
    int i = 0;
    while(i < 5) {
        i++;
        if(i < 3) {
            continue;
        }
        printf("%d回目の処理です\n", i);
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

3回目の処理です
4回目の処理です
5回目の処理です
処理が終了しました

このサンプルコードでint型の変数「i」の「i < 3」という条件を満たす間はループ内の「continue」句以降の処理は行われず、ループ内の最初の処理に戻っています。

変数「i」の「i < 3」という条件を満たさなくなると、ループ内のそれ以降の処理も実行されています。

while文の「i < 5」という条件を満たさなくなると、ループ外の処理を実行し最後まで処理が実行されています。

条件式が複数の場合

条件式が2つ以上の複数ある場合は、「OR」や「AND」といった論理演算子を使います。

論理演算子には次のようなモノがあります。

論理演算子の種類書き方例説明
ORA || BAもしくはBのどちらか一方が「true」であれば、「true」の値を返す。
A、Bどちらとも「false」の場合のみ、「false」の値を返す。
ANDA && BA、Bどちらとも「true」の場合のみ、「true」の値を返す。
AもしくはBのどちらか一方が「false」であれば、「false」の値を返す。
NOT!AAが「true」の場合「false」の値を返す。
「false」の場合「true」の値を返す。

それではサンプルコードで確認しましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    while(i >= 0 && i < 3) {
        printf("%d回目の処理です\n", i + 1);
        i++;
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

条件式については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【C言語入門】if文で条件分岐(else、AND/OR、否定、省略)
更新日 : 2019年3月28日

while(1)で無限ループを作成

while文で無限ループを回したい場合があります。無限ループとは半永久的に繰り返されるループのことです。

そんな場合は以下のように記述します。

while (1) {
    //条件式がtrueのときに繰り返す処理
}

while文は条件式がtrueの場合、処理が繰り返されます。

C言語ではtrueをint型の1で表しますので、条件式を1と記述すれば無限ループを作成することができます。

サンプルコードで確認しましょう。

ただし、無限にループが回ることになるので、あらかじめ処理を止める方法を確認してから実行しましょう。

#include <stdio.h>
 
int main(void) {
    while(1) {
        
    }
    printf("処理が終了しました\n");
    
    return 0;
}

break文で無限ループから抜ける方法

さきほどのサンプルコードでは、while文が無限にループを回すことになってしまいました。

break文を使って無限ループから抜けられるようにしておきましょう。

#include <stdio.h>
 
int main(void) {
    int i = 0;
    while(1) {
        i++;
        if(i > 3) {
            break;
        }
        printf("%d回目の処理です\n", i);
    }
    printf("処理が終了しました\n");
    
    return 0;
}

実行結果:

1回目の処理です
2回目の処理です
3回目の処理です
処理が終了しました

このサンプルコードでは、while文が無限ループになるように記述しています。

ただし、int型変数「i」が「i > 3」の条件を満たすようになれば、break文によってwhile文から抜け出すことができて、処理が終了しています。

while文を無限ループで使用する場合は、このように他の条件でループを抜けられるようにしておきましょう。

まとめ

ここでは、while文の使い方について説明しました。

while文を使う場合は条件を満たしたあとに必要のない処理を行わないように、「break」句や「continue」句と組み合わせて適切に制御する必要があります。

「break」句や「continue」句とあわせて使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説