prg-lang-2 / week10 / report10.c
report10.c
Raw
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

#define TRY_MAX 5
#define NUM_MAX 500

/*
 * <解法>
 * 回答回数の上限を定義する`TRY_MAX`と数の上限を定義する`NUM_MAX`をdefineを用いて定義することで容易に変更しやすくしている。
 * 新たに`cnt`変数を用意することで回答回数を保存し、プレイヤーに質問する箇所で残りの回答回数を表示している。
 * 回答ループの条件式に`cnt`を用いた式を追加することで、回答が一致した場合ないしは回答回数が上限突破したときにループを抜けるようにしている。
 * ループ後の処理は、どちらが要因でループを抜けたかを判断するために条件式で分岐させている。
 * ゲームオーバーの場合は答えを表示し終了する。
 */

int main(void)
{
    srand((unsigned int)time(NULL));
    int ans = rand() % NUM_MAX;
    int cnt = 0;
    int res;

    printf("0~%dの整数を当てよう!!\n\n", NUM_MAX - 1);

    do
    {
        printf("いくつかな?(残り回数%d):", TRY_MAX - cnt);
        scanf("%d", &res);
        cnt++;

        if (res > ans)
            printf("もっと小さいです!\n");

        if (res < ans)
            printf("もっと大きいです!\n");

    } while (res != ans && cnt < TRY_MAX);

    if (cnt >= TRY_MAX)
    {
        printf("ゲームオーバー!\n答えは%dです!", ans);
    }
    else
    {
        printf("正解です!\n");
    }

    return 0;
}