C言語のwhile文をブラウザで練習|条件と更新の基本
C言語のwhile文は、条件が成り立っている間、同じ処理を繰り返す構文です。回数を先に決めるfor文とは違い、「条件を満たす間だけ続けたい」ときに書きやすい一方、変数の更新を忘れると処理が終わりません。この記事では、3から1までのカウントダウンをブラウザで動かし、条件と更新の位置を順番に確認します。
結論
while文では、繰り返す前に使う変数を用意し、丸括弧に継続条件を書き、波括弧の中で変数を更新します。次の例は、countが1以上の間だけ数字を表示します。
#include <stdio.h>
int main() {
int count = 3;
while (count >= 1) {
printf("%d\n", count);
count--;
}
printf("Start!\n");
return 0;
}
発生している問題
初心者がつまずきやすいのは、表示と更新の順序です。次のコードは先にcount--を実行してから表示するため、最初の3が表示されず、最後に0が表示されます。プログラムは正常終了しますが、期待したカウントダウンにはなりません。
修正前コード
#include <stdio.h>
int main() {
int count = 3;
while (count >= 1) {
count--;
printf("%d\n", count);
}
printf("Start!\n");
return 0;
}
実行結果は次のとおりです。
2
1
0
Start!
原因
while (count >= 1)の条件は、波括弧の中へ入る前に毎回確認されます。最初はcountが3なので処理へ進みますが、波括弧の先頭で2へ減らしてから表示するため、3を飛ばしてしまいます。
C言語の委員会草案N1570の6.8.5では、繰り返し文は制御式が0と比較して等しくなるまで繰り返すとされ、6.8.5.1ではwhileの制御式をループ本体の実行前に評価すると説明されています。この順序を意識すると、条件、表示、更新を置く場所を判断しやすくなります。
修正後コード
期待どおり3、2、1と表示するには、printfを先に、count--を後に置きます。1を表示した後にcountが0になり、次の条件確認で0 >= 1が偽になるため、ループを抜けます。
#include <stdio.h>
int main() {
int count = 3;
while (count >= 1) {
printf("%d\n", count);
count--;
}
printf("Start!\n");
return 0;
}
実行結果
3
2
1
Start!
ローカルのGCC 16.1.0とAI Work StudioのC/C++タブで同じコードを実行し、どちらも同じ順番と終了コード0を確認しました。結果はConsoleに表示され、Previewには表示する内容がありません。標準入力を使わないため、入力欄は空のままで実行できます。
while文で1から5の合計を求める
カウントダウン以外でも、条件と更新の考え方は同じです。次のコードはnumberが5以下の間、totalへ値を足してからnumber++で1増やします。
#include <stdio.h>
int main() {
int number = 1;
int total = 0;
while (number <= 5) {
total += number;
number++;
}
printf("Total: %d\n", total);
return 0;
}
実行結果は次のとおりです。
Total: 15
この例もローカルとAI Work Studioの両方で実行し、出力が一致しました。numberの初期値、number <= 5という条件、number++という更新の3つがそろっていることがポイントです。
よくある間違い
更新を忘れて無限ループになる
波括弧の中からcount--をなくすと、countは3のままです。count >= 1がずっと真になり、同じ表示を繰り返します。ブラウザで実行する前に、条件に使う変数がループ内で変化するか確認しましょう。
条件の境界を間違える
count > 1なら1は表示されません。1まで含める場合はcount >= 1、5まで含めて足す場合はnumber <= 5のように、境界の値を含むかを決めます。
更新を表示より前に置く
更新を先に行うと、今回の修正前コードのように3を飛ばして0を表示します。現在の値を使ってから次の値へ進みたい場合は、表示や計算の後に更新を書きます。
AI Work Studioで試す手順
- AI Work Studioを開き、C/C++タブを選びます。
- 修正前コードを貼り、「C/C++を実行」を押します。
- Consoleが
2、1、0、Start!の順になることを確認します。 count--をprintfの後ろへ移動して、もう一度実行します。3、2、1、Start!になれば、表示と更新の順序を確認できています。- 合計のコードへ置き換え、
Total: 15になることも試してみましょう。
まとめ
C言語のwhile文は、条件をループ本体の実行前に確認し、真の間だけ処理を繰り返します。期待どおりに終わらせるには、初期値、条件、更新の3つをセットで確認することが大切です。現在の値を使ってから更新するのか、更新してから使うのかで結果が変わるため、処理の順番も1行ずつ追いましょう。