プレーヤーが回答した値を保存しておけば、回答した様子を後から確認できる。
さっそくプログラムをご紹介しよう。
なお、本プログラムは、
Windows 11 Home(23H2)上で、 Visual Studio Code(1.92.2)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。
//数当てゲーム 回答履歴を表示
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STAGE 10 //最大回答回数
int main(void)
{
int i;
int stage; //回答した回数
int no; //読み込んだ値
int ans; //正解
int num[MAX_STAGE]; //読み込んだ値の履歴
srand(time(NULL)); //乱数のためを設定
ans = rand() % 100; //0~99の乱数を生成
printf("0から99までの整数を当ててください!\n");
stage = 0;
do
{
printf("残りは%d回。いくつでしょう:",MAX_STAGE - stage);
scanf("%d",&no);
num[stage++] = no; //読み込んだ値を配列に格納
if (no > ans)
printf("もっと小さいです。\n");
else if (no < ans)
printf("もっと大きいです。\n");
} while (no != ans && stage < MAX_STAGE);
if (no != ans)
printf("残念。正解は%dでした",ans);
else{
printf("正解です\n");
printf("%d回で当たりました。\n",stage);
}
puts("\n--回答履歴--");
for ( i = 0; i < stage; i++)
printf("%2d : %4d %+4d\n",i + 1,num[i],num[i] - ans);
return 0;
}
実行結果
0から99までの整数を当ててください!
残りは10回。いくつでしょう:48
もっと小さいです。
残りは9回。いくつでしょう:34
もっと大きいです。
残りは8回。いくつでしょう:40
もっと小さいです。
残りは7回。いくつでしょう:38
正解です
4回で当たりました。
--回答履歴--
1 : 48 +10
2 : 34 -4
3 : 40 +2
4 : 38 +0
本プログラムでは、回答した値の格納先に配列を利用している。
また、for文で回答履歴を表示している。
(参考)新・明解C言語 中級編 柴田 望洋(著)
コメント