C言語のきほん「じゃんけんゲーム」(3)

スポンサーリンク
プログラミング C言語

先回は、「じゃんけんゲーム」のプログラムをコンピューターの手だけでなく、人の手も表示するように変更してみた。

ただし、手の文字列、「グー」、「チョキ」、「パー」が独立した文字リテラルとして何度も現れる。

そこで、これらを「ポインタへの配列」によって実現するように変更してみよう。

なお、本プログラムは、
 Windows 11 Home(23H2)上で、Visual Studio Code(1.93.1)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で   コンパイルしている。

//じゃんけんゲーム(その3)

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int human;  //人間
    int comp;   //コンピューター
    int judge;  //勝敗
    int retry;  //もう一度
    char *hd[] = {"グー","チョキ","パー"};  //手

    srand(time(NULL));  //乱数の種を設定

    printf("じゃんけんをゲーム始めましょう!\n");

    do
    {
        comp = rand() % 3;  //  コンピューターの手を生成

        do
        {
           printf("\nじゃんけんポン!--->(0)グー(1)チョキ(2)パー:");
            scanf("%d",&human);

        } while (human < 0 || human > 2);

        printf("私は%sで、あなたは%sです。\n",hd[comp],hd[human]);
       
        judge = (human - comp + 3) % 3; //勝敗を判定

        switch (judge)
        {
        case 0: puts("引き分けです。");
            break;
        case 1: puts("あなたの負けです。");
            break;
        case 2: puts("あなたの勝ちです。");
            break;
        }

        printf("もう一度しますか?(0)いいえ(1)はい:");
        scanf("%d",&retry);

    } while (retry == 1);

    return 0;
    
}

実行結果

じゃんけんをゲーム始めましょう!

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:0
私はチョキで、あなたはグーです。
あなたの勝ちです。
もう一度しますか?(0)いいえ(1)はい:1

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:2
私はチョキで、あなたはパーです。
あなたの負けです。
もう一度しますか?(0)いいえ(1)はい:0

文字列の集合は、「2次元配列」や「ポインタの配列」で表現できる。

なお、文字列の長さが異なる場合は、「ポインタの配列」を使うと都合がよい。

「ポインタの配列」には、個々の文字列用の領域と、ポインタの配列用の領域が必要である。

前回のプログラムと比べると、とても簡潔になっている。

参考)新・明解C言語 中級編 柴田 望洋(著)

コメント

タイトルとURLをコピーしました