質問編集履歴

1

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

2019/02/23 22:52

投稿

h_proc
h_proc

スコア68

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 数字当てゲームを作っています。コンピューターに0~9のランダムな数を一つ表示させ、利用者には数を予測してもらい、キーボードから入力してもらいます。キーボードからの入力値とコンピューターから表示される数字の差により、利用者にポイントを与えたり、引いたりして、持ち点が1000点または0点になったら終了させます。このようなプログラムを書きました。しかし、キーボードからの入力値とコンピューターから表示される数字の差が正しく計算されておらず、試しに表示させ(31行目)ところ、-18456と表示されした。一体どこが間違っているのでしょうか。教えていただけると嬉しいです。よろしくお願いいたします。
1
+ 数字当てゲームを作っています。コンピューターに0~9のランダムな数を一つ表示させ、利用者には数を予測してもらい、キーボードから入力してもらいます。キーボードからの入力値とコンピューターから表示される数字の差により、利用者にポイントを与えたり、引いたりして、持ち点が1000点または0点になったら終了させます。このようなプログラムを書きました。しかし、いつまでも持ち点が50点のままです。一体どこが間違っているのでしょうか。教えていただけると嬉しいです。よろしくお願いいたします。
2
2
 
3
3
  ```c
4
4
 
@@ -8,160 +8,194 @@
8
8
 
9
9
 
10
10
 
11
- int f = 50;
12
-
13
-
14
-
15
- int rand_n(void);//これは乱数を表示させる関数
11
+ int rand_n(void);//これは乱数を表示る関数
16
-
17
-
18
-
19
- int gess(void);//入力された数字とコンピュータが出した数字を比較して判定まで行う関数
20
12
 
21
13
 
22
14
 
23
15
  int rand_n(void) {
24
16
 
17
+
18
+
19
+ int m = 0;
20
+
21
+ m = 0 + (int)(rand()*(9 - 0 + 1.0) / (1.0 + RAND_MAX));
22
+
25
23
 
26
24
 
25
+ return m;
26
+
27
+
28
+
29
+ }
30
+
27
- return 0 + (int)(rand()*(9 - 0 + 1.0) / (1.0 + RAND_MAX));
31
+ int guess(int n , int m);//入力された数字とコンピュータが出した数字の差を計算してくれる関数
32
+
33
+
34
+
35
+ int guess(int n, int m) {
36
+
37
+ int s = 0;
28
38
 
29
39
 
30
40
 
31
-
41
+ if (n > m) {
42
+
32
-
43
+ s = n - m;
44
+
45
+
46
+
33
- }
47
+ }
48
+
34
-
49
+ else {
50
+
51
+ s = m - n;
52
+
53
+
54
+
55
+ }
56
+
57
+ return s;
58
+
59
+ }
60
+
61
+ int hold(int s, int f);
62
+
63
+
64
+
65
+ int hold(int s,int f) {//持ち点を計算してくれる関数
66
+
67
+
68
+
69
+
70
+
71
+ //for (int i = 0; f < 1000; i++) {
72
+
73
+
74
+
75
+ if (s == 0) {
76
+
77
+ f = f + 400;
78
+
79
+ }
80
+
81
+ else if (s == 1) {
82
+
83
+ f = f + 300;
84
+
85
+ }
86
+
87
+ else if (s == 2) {
88
+
89
+ f = f + 250;
90
+
91
+ }
92
+
93
+ else if (s == 3) {
94
+
95
+ f = f + 150;
96
+
97
+ }
98
+
99
+ else if (s == 4) {
100
+
101
+ f = f + 100;
102
+
103
+ }
104
+
105
+ else if (s == 5) {
106
+
107
+ f = f + 50;
108
+
109
+ }
110
+
111
+ else if (s == 6) {
112
+
113
+ f = f - 10;
114
+
115
+ }
116
+
117
+ else if (s == 7) {
118
+
119
+ f = f - 20;
120
+
121
+ }
122
+
123
+ else if (s == 8) {
124
+
125
+ f = f - 30;
126
+
127
+ }
128
+
129
+ else if (s == 9) {
130
+
131
+ f = f - 50;
132
+
133
+ }
134
+
135
+
136
+
137
+ //printf("%d回目終了!あなたの持ち点は%d点です。\n", i+1, f);
138
+
139
+ //}
140
+
141
+ return f;
142
+
143
+ }
144
+
145
+
146
+
147
+
148
+
35
- int gess(void) {
149
+ int main(void) {
150
+
36
-
151
+ printf("GESS NUMBER\n");
152
+
153
+
154
+
37
-
155
+ printf("You have 50 points\n");
156
+
157
+
158
+
159
+ //キーボードからの入力を受け付ける
38
160
 
39
161
  int f = 50;
40
162
 
41
-
163
+ for (int i = 0; f < 1000; i++) {
42
-
164
+
43
- if (f == 0) {
165
+ int n = 0;
44
-
166
+
45
- printf("Yor point is 0\n");
167
+ printf("予測した数字(0~9)を入力してください。\n");
168
+
169
+
170
+
46
-
171
+ scanf("%d", &n);
172
+
173
+
174
+
175
+ rand_n();//コンピューターがえらんだ数字を表示する
176
+
177
+
178
+
47
- printf("GAME OVER\n");
179
+ printf("コンピューターが選んだ数字は%d\n", rand_n());
180
+
181
+
182
+
183
+ int t = 0;
184
+
185
+
186
+
187
+ t = guess(n, rand_n());//入力値との差を計算する
188
+
189
+
190
+
191
+ hold(t,f);//持ち点の計算をする。
192
+
193
+
194
+
195
+ printf("%d回目終了!あなたの持ち点は%d点です。\n", i + 1, f);
48
196
 
49
197
  }
50
198
 
51
-
52
-
53
- else {
54
-
55
- printf("数字を予測してください。\n");
56
-
57
- int g;
58
-
59
- scanf("%d", &g);
60
-
61
-
62
-
63
- printf("Selected number is %d\n", rand_n());
64
-
65
- printf("%d\n", g - rand());
66
-
67
- for (int i = 0; f == 100; i++) {
68
-
69
-
70
-
71
- if (g - rand_n() == 1 || rand_n() - g == 1) {
72
-
73
- f=f + 300;
74
-
75
- }
76
-
77
- else if (g - rand_n() == 2 || rand_n() - g == 2) {
78
-
79
- f=f + 250;
80
-
81
- }
82
-
83
- else if (g - rand_n() == 3 || rand_n() - g == 3) {
84
-
85
- f=f + 150;
86
-
87
- }
88
-
89
- else if (g - rand_n() == 4 || rand_n() - g == 4) {
90
-
91
- f=f + 100;
92
-
93
- }
94
-
95
- else if (g - rand_n() == 5 || rand_n() - g == 5) {
96
-
97
- f=f + 50;
98
-
99
- }
100
-
101
- else if (g - rand_n() == 6 || rand_n() - g == 6) {
102
-
103
- f=f - 10;
104
-
105
- }
106
-
107
- else if (g - rand_n() == 7 || rand_n() - g == 7) {
108
-
109
- f=f - 20;
110
-
111
- }
112
-
113
- else if (g - rand_n() == 8 || rand_n() - g == 8) {
114
-
115
- f=f - 30;
116
-
117
- }
118
-
119
- else if (g - rand_n() == 9 || rand_n() - g == 9) {
120
-
121
- f=f - 50;
122
-
123
- }
124
-
125
- else if (g - rand_n() == 0 || rand_n() - g == 0) {
126
-
127
- f=f + 400;
128
-
129
- }
130
-
131
- printf("%dst stage: Yor point is %d", i, f);
132
-
133
- }
134
-
135
-
136
-
137
- }
138
-
139
- return f;
140
-
141
- }
142
-
143
-
144
-
145
- int main(void) {
146
-
147
- printf("GESS NUMBER\n");
148
-
149
-
150
-
151
- printf("0~9の数字がランダムに表示されるので、どの数字が表示されるか予測してください。\n");
152
-
153
-
154
-
155
-
156
-
157
- printf("You have 50 points\n");
158
-
159
-
160
-
161
- gess();
162
-
163
-
164
-
165
199
  printf("Yor point is 1000!\n");
166
200
 
167
201