前回は、do文を使った「数当てゲーム」のプログラムをご紹介した。
今回は、do文と対照的に前判定繰返しを行うwhile文を使ってこのプログラムを書き換えてみよう。
なお、本プログラムは、
Windows 11 Home(23H2)上で、 Visual Studio Code(1.92.2)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。
//数当てゲーム(while文)
#include <stdio.h>
int main(void)
{
int no; //読み込んだ値
int ans = 8; //正解
printf("0から9の整数を当ててください\n");
while (1)
{
printf("いくつでしょうか:");
scanf("%d",&no);
if(no > ans)
printf("もっと小さいです。\n");
else if (no < ans)
printf("もっと大きいです。\n");
else
break;
}
printf("正解です。\n");
return 0;
}
実行結果
0から9の整数を当ててください
いくつでしょうか:6
もっと大きいです。
いくつでしょうか:9
もっと小さいです。
いくつでしょうか:8
正解です。
while文
while (式) 文
制御式である式を評価した値が0でない限り、ループ本体である文が何度も実行される。
本プログラムはのwhile文の制御式は1なので、繰返しは永遠に続くことになる。(無限ループ)
そこで、繰返し文を強制的に抜け出すために、本プログラムで使っているのが、break文である。
noとansが等しいとき、break文が実行され、while文による繰り返しが強制的に中断される。
なお、break文を使うと、プログラムが読みにくくなる傾向がある。「ある特別な条件が成立したとき、何らかの事情で繰返し文を強制的に終了したい」というような状況でのみ利用すべきだろう。
(参考)新・明解C言語 中級編 柴田 望洋(著)
コメント