###前提・実現したいこと
Cの初心者で数当てゲームを作っているのですが、以下に示す完成条件を満たすものが書けず、苦労しています。特にターン数のカウンタです。
完成条件
・プログラムの起動~終了は3ターン
・1ターン(1つの乱数生成~正解まで)において、生成した乱数を当てるまで何度も回答可能
・回答時に0を入力すると次のターンへ
・最後に総ターン数と回答数、その平均入力回数を表示するが、0入力で飛ばしたターンは無視する
・平均入力回数に応じてコメントを表示
###発生している問題・エラーメッセージ
回答数カウンタacnt、ターン数カウンタtcnt、1ゲームを計るカウンタiがぐちゃぐちゃになっている気がするので、修正したいです。 また、乱数に対する回答への条件分岐がうまく動かないです。(デバッグしたところ、正解と全然違う以外に分岐されない) 乱数のリセットするタイミングがおかしいので、完成条件2が満たせないです。
###該当のソースコード
C
1#include <time.h> 2#include <stdio.h> 3#include <stdlib.h> 4 5int main(void) { 6 long int x = 0, y, z; 7 z = x - y; 8 int i, tcnt = 1, acnt = 1; 9 10 int t = time(NULL); 11 srandom(t); 12 13 for(i=1; i<=3; i++){ 14 x = 1 + random() % 99; 15 printf("%dターン目\n", i); 16 // printf("%ld\n", x); 17 18 printf("第%d回予想: ", acnt); 19 scanf("%ld", &y); 20 if(y != 0){ 21 acnt ++; 22 if(y == x){ 23 puts("正解"); 24 tcnt ++; 25 }else if((z <= 5 && z >= 1) || (z <= -1 && z >= -5)){ 26 puts("おしい"); 27 }else if((z <= 6 && z >= 10) || (z <= -6 && z >= -10)){ 28 puts("もう少し"); 29 }else{ 30 puts("全然違う"); 31 } 32 } 33 } 34 double ave = acnt/tcnt; 35 printf("あなたは%dターンで%d回回答しました。1ターンあたりの平均は%f回です。\n", tcnt, acnt, ave); 36 if(ave <= 3){ 37 puts("すごい"); 38 }else if(4 <= ave && ave <= 6){ 39 puts("やるね"); 40 }else if(7 <= ave && ave <= 10){ 41 puts("まあまあ"); 42 }else{ 43 puts("普通"); 44 } 45 46 return 0; 47 48}
###試したこと
プログラミング初心者ですがかれこれこの程度に10時間以上かかってしまっています…
###補足情報(言語/FW/ツール等のバージョンなど)
VMwareでCentOS7+Eclipseでやっています
完成イメージです
回答1件
あなたの回答
tips
プレビュー