じゃんけんゲームを作成したのですが、手を入力する際と再度挑戦する際に数字以外の文字を入力すると無限ループしてしまいます。
数字以外が入力されていますと、エラー出力したのですがどのようにすればよろしいでしょうか?
よろしくお願い致します。
c
1#include <time.h> 2#include <stdio.h> 3#include <stdlib.h> 4 5int human; /*人間の手*/ 6int com; /*コンピュータの手*/ 7int win_no; /*勝った回数*/ 8int lose_no; /*負けた回数*/ 9int draw_no; /*引き分けの回数*/ 10/* 手 */ 11char *hand[] = {"グー","チョキ","パー"}; 12 13/* 初期化処理 */ 14void initialize(void) 15{ 16 win_no = 0; 17 lose_no =0; 18 draw_no =0; 19 20 srand(time(NULL)); 21 printf("じゃんけんゲーム開始です\n"); 22} 23 24/* じゃんけん実行(手の読み込み/生成) */ 25void jyanken(void) 26{ 27 int i; 28 /* コンピュータの手(0~2)を乱数で生成 */ 29 com = rand()%3; 30 31 while(1) 32 { 33 printf("じゃんけんポン…"); 34 for(i = 0; i < 3; i++) 35 { 36 printf("(%d)%s", i, hand[i]); 37 } 38 printf(":"); 39 /* 人間の手を読み込む */ 40 scanf("%d",&human); 41 if(0 <= human && human <=2) 42 { 43 break; 44 } 45 printf("0~2の数字を再度入力して下さい\n"); 46 } 47} 48/* 勝ち/負け/引き分け回数を更新 */ 49void count_no(int result) 50{ 51 switch(result) 52 { 53 /* 引き分け */ 54 case 0: draw_no++; 55 break; 56 57 /* 負け */ 58 case 1: lose_no++; 59 break; 60 61 /* 勝ち */ 62 case 2: win_no++; 63 break; 64 } 65} 66 67/* 判定結果を表示 */ 68void disp_result(int result) 69{ 70 switch(result) 71 { 72 case 0: printf("引き分け"); 73 break; 74 75 case 1: printf("あなたの負けです"); 76 break; 77 78 case 2: printf("あなたの勝ちです"); 79 break; 80 } 81} 82 83/* 再挑戦するかを確認 */ 84int Retry(void) 85{ 86 int x; 87 printf("もう一度しますか""(0)いいえ (1)はい :"); 88 scanf("%d", &x); 89 90 return x; 91} 92 93int main(void) 94{ 95 int judge; /* 勝敗 */ 96 int retry; /* もう一度 */ 97 98 /* 初期化処理 */ 99 initialize(); 100 101 do 102 { 103 /* じゃんけんの実行 */ 104 jyanken(); 105 /* コンピュータと人間の手を表示 */ 106 printf("私は%sで、あなたは%sです。\n",hand[com],hand[human]); 107 /* 勝敗判定 */ 108 judge = (human - com + 3)%3; 109 /* 勝ち、負け、引き分け回数を更新 */ 110 count_no(judge); 111 /* 判定結果を表示 */ 112 disp_result(judge); 113 /* 再挑戦するか確認 */ 114 while(1) 115 { 116 retry = Retry(); 117 if( retry == 0 ) 118 { 119 printf("%d勝%d敗%d分けでした。",win_no,lose_no,draw_no); 120 break; 121 } 122 else if (retry == 1) 123 { 124 break; 125 } 126 else 127 { 128 printf("0~1の数字を再度入力して下さい\n"); 129 } 130 } 131 } 132 while(retry == 1); 133 return 0; 134} 135
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。