質問編集履歴
2
プログラム文の変更、それに伴う実行結果や問題箇所の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,12 +12,12 @@
|
|
12
12
|
|s1[0]|4|
|
13
13
|
|
14
14
|
図1. スタック1
|
15
|
-
|s
|
15
|
+
|s2[4]| |
|
16
16
|
|:--|:--:|
|
17
|
-
|s
|
17
|
+
|s2[3]||
|
18
|
-
|s
|
18
|
+
|s2[2]||
|
19
|
-
|s
|
19
|
+
|s2[1]||
|
20
|
-
|s
|
20
|
+
|s2[0]||
|
21
21
|
|
22
22
|
図2. スタック2
|
23
23
|
|
@@ -49,14 +49,14 @@
|
|
49
49
|
void f(IntStack *s1, IntStack *s2)
|
50
50
|
{
|
51
51
|
int x;
|
52
|
-
Pop(
|
52
|
+
Pop(s1, &x);
|
53
|
-
Push(
|
53
|
+
Push(s2, x);
|
54
54
|
}
|
55
55
|
|
56
56
|
int g(IntStack *s2)
|
57
57
|
{
|
58
58
|
int x;
|
59
|
-
Pop(
|
59
|
+
Pop(s2, &x);
|
60
60
|
return x;
|
61
61
|
}
|
62
62
|
```
|
@@ -104,24 +104,37 @@
|
|
104
104
|
### 前提
|
105
105
|
|
106
106
|
C言語で上記のようなプログラムを作っています。
|
107
|
-
実
|
107
|
+
実行結果がうまく表示されません。
|
108
|
-
|
108
|
+
下に実行画面を表示します。
|
109
109
|
|
110
110
|
### 発生している問題・エラーメッセージ
|
111
111
|
|
112
112
|
```
|
113
|
+
s1[3] = 1 s2[3] = 1
|
113
|
-
|
114
|
+
s1[2] = 2 s2[2] = 2
|
115
|
+
s1[1] = 3 s2[1] = 3
|
116
|
+
s1[0] = 4 s2[0] = 4
|
117
|
+
|
118
|
+
fを実行。
|
119
|
+
s1[2] = 2 s2[2] = 2
|
120
|
+
s1[1] = 3 s2[1] = 3
|
121
|
+
s1[0] = 4 s2[0] = 4
|
122
|
+
|
123
|
+
s1[0] = 1 s2[0] = 1
|
124
|
+
|
125
|
+
fを実行。
|
126
|
+
s1[1] = 3 s2[1] = 3
|
127
|
+
s1[0] = 4 s2[0] = 4
|
128
|
+
|
129
|
+
s1[1] = 2 s2[1] = 2
|
130
|
+
s1[0] = 1 s2[0] = 1
|
131
|
+
|
132
|
+
gを実行。出力は2。
|
133
|
+
s1[0] = 1 s2[0] = 1
|
134
|
+
|
135
|
+
gを実行。出力は1。
|
136
|
+
|
114
|
-
|
137
|
+
続行するには何かキーを押してください . . .
|
115
|
-
・「62」行目:悪い書き方のプログラム
|
116
|
-
互換性のないポインタ型から代入しています。
|
117
|
-
・「63」行目:悪い書き方のプログラム
|
118
|
-
互換性のないポインタ型から代入しています。
|
119
|
-
・「63」行目:悪い書き方のプログラム
|
120
|
-
assignment makes integer from pointer without a cast
|
121
|
-
・「69」行目:悪い書き方のプログラム
|
122
|
-
互換性のないポインタ型から代入しています。
|
123
|
-
・「94」行目:プログラムの記述ミス
|
124
|
-
関数に指定されている引数が多すぎます
|
125
138
|
```
|
126
139
|
|
127
140
|
### 該当のソースコード
|
@@ -188,14 +201,14 @@
|
|
188
201
|
void f(IntStack *s1, IntStack *s2)
|
189
202
|
{
|
190
203
|
int x;
|
191
|
-
Pop(
|
204
|
+
Pop(s1, &x);
|
192
|
-
Push(
|
205
|
+
Push(s2, x);
|
193
206
|
}
|
194
207
|
|
195
208
|
int g(IntStack *s2)
|
196
209
|
{
|
197
210
|
int x;
|
198
|
-
Pop(
|
211
|
+
Pop(s2, &x);
|
199
212
|
return x;
|
200
213
|
}
|
201
214
|
|
@@ -218,12 +231,15 @@
|
|
218
231
|
Push(&s1, 2);
|
219
232
|
Push(&s1, 1);
|
220
233
|
|
234
|
+
Print(&s1);
|
221
235
|
printf("fを実行。\n");
|
222
236
|
f(&s1, &s2);
|
223
|
-
Print(&s1
|
237
|
+
Print(&s1);
|
238
|
+
Print(&s2);
|
224
239
|
printf("fを実行。\n");
|
225
240
|
f(&s1, &s2);
|
226
|
-
Print(&s1
|
241
|
+
Print(&s1);
|
242
|
+
Print(&s2);
|
227
243
|
printf("gを実行。出力は2。\n");
|
228
244
|
g(&s2);
|
229
245
|
Print(&s2);
|
@@ -231,7 +247,8 @@
|
|
231
247
|
g(&s2);
|
232
248
|
Print(&s2);
|
233
249
|
|
234
|
-
Terminate(&s1
|
250
|
+
Terminate(&s1);
|
251
|
+
Terminate(&s2);
|
235
252
|
|
236
253
|
return 0;
|
237
254
|
}
|
@@ -240,10 +257,6 @@
|
|
240
257
|
### 試したこと
|
241
258
|
Terminate関数の作成まではスタックの作成方法のやり方を忠実に行った。
|
242
259
|
|
243
|
-
また、ここまでの変数をsではなくs1,s2として、他の関数にも全てs1,s2の二つの変数分の指示を挿入したがうまく動作しなかった元に戻した。
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
関数f
|
260
|
+
関数fとgの内容を修正し、今までエラーメッセージが出力され、実行画面が表示されなかったところを実行画面が表示されるようになった。
|
261
|
+
|
249
|
-
|
262
|
+
s1とs2の値が変わっていないため、Print関数の内容か、main関数内のPrint関数の使い方に問題があると考えている。
|
1
試したことを追記した
test
CHANGED
File without changes
|
test
CHANGED
@@ -240,7 +240,10 @@
|
|
240
240
|
### 試したこと
|
241
241
|
Terminate関数の作成まではスタックの作成方法のやり方を忠実に行った。
|
242
242
|
|
243
|
-
また、ここまでの変数をsではなくs1,s2としたがうまく
|
243
|
+
また、ここまでの変数をsではなくs1,s2として、他の関数にも全てs1,s2の二つの変数分の指示を挿入したがうまく動作しなかった元に戻した。
|
244
|
+
|
245
|
+
|
246
|
+
|
244
247
|
|
245
248
|
関数f,g以降でエラーメッセージが出るため、この部分以降が原因と思われる。
|
246
249
|
|