teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードの書き直し。質問内容を少し変更しました。

2019/02/23 22:52

投稿

h_proc
h_proc

スコア68

title CHANGED
File without changes
body CHANGED
@@ -1,85 +1,102 @@
1
- 数字当てゲームを作っています。コンピューターに0~9のランダムな数を一つ表示させ、利用者には数を予測してもらい、キーボードから入力してもらいます。キーボードからの入力値とコンピューターから表示される数字の差により、利用者にポイントを与えたり、引いたりして、持ち点が1000点または0点になったら終了させます。このようなプログラムを書きました。しかし、キーボードからの入力値とコンピューターから表示される数字の差が正しく計算されておらず、試しに表示させ(31行目)ところ、-18456と表示されした。一体どこが間違っているのでしょうか。教えていただけると嬉しいです。よろしくお願いいたします。
1
+ 数字当てゲームを作っています。コンピューターに0~9のランダムな数を一つ表示させ、利用者には数を予測してもらい、キーボードから入力してもらいます。キーボードからの入力値とコンピューターから表示される数字の差により、利用者にポイントを与えたり、引いたりして、持ち点が1000点または0点になったら終了させます。このようなプログラムを書きました。しかし、いつまでも持ち点が50点のままです。一体どこが間違っているのでしょうか。教えていただけると嬉しいです。よろしくお願いいたします。
2
2
  ```c
3
3
  #include <stdio.h>
4
4
  #include<stdlib.h>
5
5
 
6
- int f = 50;
6
+ int rand_n(void);//これは乱数を表示する関数
7
7
 
8
- int rand_n(void);//これは乱数を表示させる関数
8
+ int rand_n(void) {
9
9
 
10
+ int m = 0;
10
- int gess(void);//入力された数字とコンピュータが出した数字を比較して判定まで行う関数
11
+ m = 0 + (int)(rand()*(9 - 0 + 1.0) / (1.0 + RAND_MAX));
12
+
13
+ return m;
11
14
 
12
- int rand_n(void) {
13
-
14
- return 0 + (int)(rand()*(9 - 0 + 1.0) / (1.0 + RAND_MAX));
15
-
16
-
17
15
  }
16
+ int guess(int n , int m);//入力された数字とコンピュータが出した数字の差を計算してくれる関数
17
+
18
- int gess(void) {
18
+ int guess(int n, int m) {
19
+ int s = 0;
19
20
 
20
- int f = 50;
21
-
22
- if (f == 0) {
21
+ if (n > m) {
23
- printf("Yor point is 0\n");
22
+ s = n - m;
24
- printf("GAME OVER\n");
23
+
25
24
  }
26
-
27
25
  else {
28
- printf("数字を予測してください。\n");
26
+ s = m - n;
27
+
28
+ }
29
- int g;
29
+ return s;
30
+ }
30
- scanf("%d", &g);
31
+ int hold(int s, int f);
31
32
 
32
- printf("Selected number is %d\n", rand_n());
33
+ int hold(int s,int f) {//持ち点を計算してくれる関数
33
- printf("%d\n", g - rand());
34
+
34
- for (int i = 0; f == 100; i++) {
35
35
 
36
- if (g - rand_n() == 1 || rand_n() - g == 1) {
37
- f=f + 300;
38
- }
39
- else if (g - rand_n() == 2 || rand_n() - g == 2) {
36
+ //for (int i = 0; f < 1000; i++) {
37
+
40
- f=f + 250;
38
+ if (s == 0) {
41
- }
42
- else if (g - rand_n() == 3 || rand_n() - g == 3) {
43
- f=f + 150;
44
- }
45
- else if (g - rand_n() == 4 || rand_n() - g == 4) {
46
- f=f + 100;
47
- }
48
- else if (g - rand_n() == 5 || rand_n() - g == 5) {
49
- f=f + 50;
50
- }
51
- else if (g - rand_n() == 6 || rand_n() - g == 6) {
52
- f=f - 10;
53
- }
54
- else if (g - rand_n() == 7 || rand_n() - g == 7) {
55
- f=f - 20;
56
- }
57
- else if (g - rand_n() == 8 || rand_n() - g == 8) {
58
- f=f - 30;
59
- }
60
- else if (g - rand_n() == 9 || rand_n() - g == 9) {
61
- f=f - 50;
62
- }
63
- else if (g - rand_n() == 0 || rand_n() - g == 0) {
64
- f=f + 400;
39
+ f = f + 400;
65
- }
66
- printf("%dst stage: Yor point is %d", i, f);
67
40
  }
68
-
41
+ else if (s == 1) {
42
+ f = f + 300;
69
- }
43
+ }
44
+ else if (s == 2) {
45
+ f = f + 250;
46
+ }
47
+ else if (s == 3) {
48
+ f = f + 150;
49
+ }
50
+ else if (s == 4) {
51
+ f = f + 100;
52
+ }
53
+ else if (s == 5) {
54
+ f = f + 50;
55
+ }
56
+ else if (s == 6) {
57
+ f = f - 10;
58
+ }
59
+ else if (s == 7) {
60
+ f = f - 20;
61
+ }
62
+ else if (s == 8) {
63
+ f = f - 30;
64
+ }
65
+ else if (s == 9) {
66
+ f = f - 50;
67
+ }
68
+
69
+ //printf("%d回目終了!あなたの持ち点は%d点です。\n", i+1, f);
70
+ //}
70
71
  return f;
71
72
  }
72
73
 
74
+
73
75
  int main(void) {
74
76
  printf("GESS NUMBER\n");
75
77
 
76
- printf("0~9の数字がランダムに表示されるので、どの数字が表示されるか予測してください。\n");
77
-
78
-
79
78
  printf("You have 50 points\n");
80
79
 
80
+ //キーボードからの入力を受け付ける
81
+ int f = 50;
82
+ for (int i = 0; f < 1000; i++) {
81
- gess();
83
+ int n = 0;
84
+ printf("予測した数字(0~9)を入力してください。\n");
82
85
 
86
+ scanf("%d", &n);
87
+
88
+ rand_n();//コンピューターがえらんだ数字を表示する
89
+
90
+ printf("コンピューターが選んだ数字は%d\n", rand_n());
91
+
92
+ int t = 0;
93
+
94
+ t = guess(n, rand_n());//入力値との差を計算する
95
+
96
+ hold(t,f);//持ち点の計算をする。
97
+
98
+ printf("%d回目終了!あなたの持ち点は%d点です。\n", i + 1, f);
99
+ }
83
100
  printf("Yor point is 1000!\n");
84
101
 
85
102
  printf("Quit this game\n");