Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2018年7月19日に更新

第2章19 while文で繰り返し処理を作る

イチからゲーム作りで覚えるC言語
第2章18 明示的な型変換(型キャスト)を知る : PREV
NEXT : 第2章20 do~while文で繰り返し処理を作る :

この記事でやること

前回はプロジェクト「0145_cast」を新しく作り、型キャストについてお話ししました。

今回は、新しくプロジェクト「0150_while」を作り、繰り返し処理を行うwhile文についてお話します。この書き方を知っていることで、特定の処理をループ(繰り返し)させることで同じ処理を何度も書く必要がなくなります。

なお、繰り返し処理はC言語で幾つかあります。下の順番でお話ししたいと思います。

  • while ( 繰り返す条件 ) {… 繰り返す内容 …} ←ココのお話
  • do { … 繰り返す内容 … } while ( 繰り返す条件 )
  • for ( 最初の処理 ; 繰り返し条件 ; 繰り返し終了の処理 ) {…繰り返す内容… }
  • 繰り返し処理の多重構造と break、continue などのジャンプ文

繰り返し処理を行うプログラム

繰り返し処理をくみこんだソースコードを実際にプログラムを動かして結果を見てみましょう。

 
While.c
#include <stdio.h>
int main() {
 int manpuku = 10;
 char namae[] = "ぷらんく";
 char food1[] = "リンゴ";
 char food2[] = "チーズ";
 printf("%s の満腹感は %d です。\n", namae , manpuku);
 while( manpuku < 100 ) {
   manpuku = manpuku + 15;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food1, manpuku);
   manpuku = manpuku + 20;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food2, manpuku);
 }
 printf("%s はおなかいっぱいです。\n", namae );
}

このコードを実行してみるとこんな結果になったかと思います。

While.cの実行結果
ぷらんく の満腹感は 10 です。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 25 になった。
もぐもぐ… ぷらんく は チーズ を食べて満腹感が 45 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 60 になった。
もぐもぐ… ぷらんく は チーズ を食べて満腹感が 80 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 95 になった。
もぐもぐ… ぷらんく は チーズ を食べて満腹感が 115 になった。
ぷらんく はおなかいっぱいです。

ひたすらリンゴとチーズを食べ、満腹度が100を超えたら繰り返し処理を終了しています。もぐもぐ…

繰り返し文とは

C言語ではプログラムの処理を繰り返すための文が用意されています。書き方は下のような形です。

while ( 繰り返す条件 ) {… 繰り返す内容 …}

「繰り返す条件」の部分が 0 以外だったとき、「繰り返す内容」の中身を延々と繰り返します。繰り返し文はとても便利ですが、使い方によっては無限ループになってしまうこともあるので、注意が必要です。流れは下のようなイメージです。

while 文の繰り返し処理の流れ while 文の繰り返し処理の流れ

ソースコードの処理を追ってみる

今回のソースコードの中身を確認してみましょう。

6行目までは変数の宣言と初期化をしているだけですね。

 
While.c
 printf("%s の満腹感は %d です。\n", namae , manpuku);

7行目で一部の変数を使ってプレイヤーのステータスを表示しています。

この時点では、変数はこんな内容になっています。

  • int 型変数の manpuku には 整数 10 が入っている
  • char型配列の変数 namae には "ぷらんく" という文字列が入っている
  • char型配列の変数 food1 には "リンゴ" という文字列が入っている
  • char型配列の変数 food2 には "チーズ" という文字列が入っている

8行目からが while文 (繰り返し文)となっています。まずは「繰り返し条件」の中身チェックからはじまります。

 
While.c
 while( manpuku < 100 ) {

繰り返し条件は「 manpuku < 100 」となっています。

つまり、変数 manpuku の中身が 100 未満なら、繰り返し処理(すぐ後ろの{ ~ }内)を実行する、ということになります。 もしここで変数 manpuku の中身が 100 以上なら、

繰り返し処理{ ~ }は一度も実行されずにスキップ

されます。

最初に8行目にたどり着いたときは変数 manpuku の中身は 10 なので、繰り返し条件を満たしており、繰り返し処理が実行されます。繰り返しの処理は下のハイライト部分です。

 
For.c
#include <stdio.h>
int main() {
 int manpuku = 10;
 char namae[] = "ぷらんく";
 char food1[] = "リンゴ";
 char food2[] = "チーズ";
 printf("%s の満腹感は %d です。\n", namae , manpuku);
 while( manpuku < 100 ) {
   manpuku = manpuku + 15;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food1, manpuku);
   manpuku = manpuku + 20;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food2, manpuku);
 }
 printf("%s はおなかいっぱいです。\n", namae );
}

9行目では変数 manpuku の中身を 15 増やしています。ここで、manpuku の中身は 10 から 25 に上がっています。

10行目で増えた満腹感をコンソールに表示しています。

11行目では変数 manpuku の中身を 20 増やしています。ここで manpuku の中身は 25 から 45 に挙がっています。

12行目で増えた満腹感をコンソールに表示しています。ここで、 while文の繰り返し{…}のカッコが閉じています。このときまた、while の繰り返し条件(8行目)に戻ります。

2回目以降の繰り返し条件チェック

 
While.c
 while( manpuku < 100 ) {

1度、9~12行目を実行した後、while 文の繰り返し処理でまた8行目に戻ってきました。

この時、manpuku には整数 45 が入っているので、 45 < 100 は正しい(真)で、また繰り返し処理の中が実行されることになります。

また9~12行目が実行された後、8 行目の while 文の 繰り返し条件チェックに戻ってきます。この時は manpuku は 80 となっていますね。

さらに9~12行目が実行された後、8 行目の while 文の 繰り返し条件チェックに戻ってきます。この時は manpuku は 115 となり、100以上となりました。 115 < 100 で、繰り返し条件チェックでは正しくない(0、偽、false)となるため、 { … 繰り返し処理 … } は実行されず、次の行から処理が続きます。

繰り返し処理終了

無事に while 処理が終わり、おなかがいっぱいの報告をしてプログラムはおしまいとなります。

 
While.c
 printf("%s はおなかいっぱいです。\n", namae );

繰り返し処理内でのジャンプ処理

繰り返し処理{…}の中では、特定の場所にジャンプするためのジャンプ文があります。

繰り返し処理から抜け出す break文 について

switch 文のときにも「switch文を終了する文」として登場した break文ですが、while 文や後ほど紹介する for 文の中でも使うことができます。

while 文の中で使うと、その場で、while(繰り返し条件){…繰り返し処理…}の直後にジャンプすることができます。下のように使います。

※11行目に break 文を追加してみました。

while.c
#include <stdio.h>
int main() {
 int manpuku = 10;
 char namae[] = "ぷらんく";
 char food1[] = "リンゴ";
 char food2[] = "チーズ";
 printf("%s の満腹感は %d です。\n", namae , manpuku);
 while( manpuku < 100 ) {
   manpuku = manpuku + 15;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food1, manpuku);
   break;
   manpuku = manpuku + 20;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food2, manpuku);
 }
 printf("%s はおなかいっぱいです。\n", namae );
}

これを動かすと、下のような結果になったと思います。

While.c+break文
ぷらんく の満腹感は 10 です。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 25 になった。
ぷらんく はおなかいっぱいです。

while 文の処理が11行目で中断されて、 while 文の直後から処理が再開されています。リンゴ一つでおなか一杯になったことになっちゃってますね。

while 文の中で if 文を使って特定の条件があった場合にループを抜け出すときに使ったりします。ジャンプは下のようなイメージです。

while 文で break 文を使用したときの流れ while 文で break 文を使用したときの流れ

繰り返し条件に戻る continue 文 について

while 文の繰り返し条件に戻る continue文 を使うことができます。

continue には直訳で「続く」という意味があります。

while 文の中で使うと、その場で、while(繰り返し条件){…繰り返し処理…}の繰り返し条件部分にジャンプすることができます。下のように使います。

※11行目に continue文 を追加してみました。

while.c
#include <stdio.h>
int main() {
 int manpuku = 10;
 char namae[] = "ぷらんく";
 char food1[] = "リンゴ";
 char food2[] = "チーズ";
 printf("%s の満腹感は %d です。\n", namae , manpuku);
 while( manpuku < 100 ) {
   manpuku = manpuku + 15;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food1, manpuku);
   continue;
   manpuku = manpuku + 20;
   printf("もぐもぐ… %s は %s を食べて満腹感が %d になった。\n", namae, food2, manpuku);
 }
 printf("%s はおなかいっぱいです。\n", namae );
}

これを動かすと下のような結果になります。

While+continue
ぷらんく の満腹感は 10 です。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 25 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 40 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 55 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 70 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 85 になった。
もぐもぐ… ぷらんく は リンゴ を食べて満腹感が 100 になった。
ぷらんく はおなかいっぱいです。

continue 文が実行されたとき、強制的に 8 行目の while 文の先頭まで戻ってしまっています。ですので、一切チーズを食べるところまですすまず、ひたすらリンゴを食べる処理を繰り返し、100になった時、while文が終了しています。

ジャンプは下のようなイメージです。

while 文で continue 文を使った時の処理の流れ while 文で continue 文を使った時の処理の流れ

あとがき

繰り返し文の一つである while 文をお話しました。

同じような処理は並べて書くこともできますが、while文で繰り返し処理で表現できるかを考えてみると、以外にすっきり書くことができたりします。

今後も繰り返し処理はいろいろなところで使われる予定です!

今回はここまで。おつかれさまでした。

非常に参考になったサイトさまや、参考文献など

ページの更新履歴

更新日 更新内容
2018/7/19 ページ公開
2018/9/9 アイキャッチ画像とトップ画像作成・追加
イチからゲーム作りで覚えるC言語
第2章18 明示的な型変換(型キャスト)を知る : PREV
NEXT : 第2章20 do~while文で繰り返し処理を作る :
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

ゲーム等で使えるつなぎ目のないループするテクスチャ画像の作り方

#ツール#ゲームプログラミング✎ 2021-01-24
ゲームなどで使えるループ画像、パターンテクスチャのツール、手動での作り方をまとめ
広告領域
追従 広告領域
目次
第2章19 while文で繰り返し処理を作る
第2章19 while文で繰り返し処理を作る
この記事でやること
この記事でやること
繰り返し処理を行うプログラム
繰り返し処理を行うプログラム
繰り返し文とは
繰り返し文とは
ソースコードの処理を追ってみる
ソースコードの処理を追ってみる
2回目以降の繰り返し条件チェック
2回目以降の繰り返し条件チェック
繰り返し処理終了
繰り返し処理終了
繰り返し条件に戻る continue 文 について
繰り返し条件に戻る continue 文 について
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020