質問編集履歴

2

プログラム文の変更、それに伴う実行結果や問題箇所の変更

2023/11/12 14:59

投稿

kouchan_dd
kouchan_dd

スコア20

test CHANGED
File without changes
test CHANGED
@@ -12,12 +12,12 @@
12
12
  |s1[0]|4|
13
13
 
14
14
  図1. スタック1
15
- |s1[4]| |
15
+ |s2[4]| |
16
16
  |:--|:--:|
17
- |s1[3]||
17
+ |s2[3]||
18
- |s1[2]||
18
+ |s2[2]||
19
- |s1[1]||
19
+ |s2[1]||
20
- |s1[0]||
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(&s1, &s2);
52
+ Pop(s1, &x);
53
- Push(&s2, &x);
53
+ Push(s2, x);
54
54
  }
55
55
 
56
56
  int g(IntStack *s2)
57
57
  {
58
58
  int x;
59
- Pop(&s2, &x);
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
- ・「62」行目:悪い書き方のプログラム
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(&s1, &s2);
204
+ Pop(s1, &x);
192
- Push(&s2, &x);
205
+ Push(s2, x);
193
206
  }
194
207
 
195
208
  int g(IntStack *s2)
196
209
  {
197
210
  int x;
198
- Pop(&s2, &x);
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, &s2);
237
+ Print(&s1);
238
+ Print(&s2);
224
239
  printf("fを実行。\n");
225
240
  f(&s1, &s2);
226
- Print(&s1, &s2);
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, &s2);
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,g以降でエラーメッセージが出め、の部分以降原因と思われる。
260
+ 関数fgの内容を修正し、今までエラーメッセージが出力され、実行画面が表示されなかっろを実行画面表示されるようになった
261
+
249
-
262
+ s1とs2の値が変わっていないため、Print関数の内容か、main関数内のPrint関数の使い方に問題があると考えている。

1

試したことを追記した

2023/11/09 12:19

投稿

kouchan_dd
kouchan_dd

スコア20

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