ランダムに決められた1〜100の数を10回以内に当てられたら勝ち。 各解答に対し答えがそれより大きいか小さいかがヒントとしてあたえられる。 10回で当てられなかったら負け。
答の数をランダムで生成するにはrand()を使います。
rand()の説明の前にまず、rand()を使うにはソースの最初に
#include <stdio.h>
#include <stdlib.h>
のように#include <stdlib.h>の行を足してやる必要があります(前章でルートを使う時もこんなことがありましたね)。
さてrand()ですが0〜65535の適当な値を返します。
今回必要な乱数の範囲は1〜100なのでmod100を考えます。
これで0〜99。
これに1を加えれば1〜100。
まとめると
answer=rand()%100+1;
とやればよいわけです。
厳密には1〜36になる確率がほんのすこ〜しだけ高いですが無視する方向で。
挑戦できるのは10回ですから
for(i=10;i>0;i--)
{
printf("あと%d回\n",i);
挑戦
}
終了
挑戦部分は
printf("答はいくつでしょう>");
scanf("%d",&x);
if(x==answer) break;
if(x>answer) printf("もっと小さい!");
if(x<answer) printf("もっと大きい!");
終了時は勝った場合と負けた場合の二通りの場合があります。
残り回数iが0になっていた場合は負け、0でなかった場合(途中で正解しbreakでループを抜けた)は勝ちです。
if(i==0) printf("出直してこい!");
else printf("正解!おめでとう!");
解答です。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,answer,x;
answer=rand()%100+1;
printf("数当てゲーム\n");
printf("私が考えた数字を当てられるかな?(1〜100)\n");
for(i=10;i>0;i--)
{
printf("あと%d回\n",i);
printf("答はいくつでしょう>");
scanf("%d",&x);
if(x==answer) break;
if(x>answer) printf("もっと小さい!");
if(x<answer) printf("もっと大きい!");
}
if(i==0) printf("出直してこい!");
else printf("正解!おめでとう!");
return 0;
}