回答編集履歴

6

誤字の修正

2015/11/12 22:10

投稿

退会済みユーザー
test CHANGED
@@ -126,7 +126,7 @@
126
126
 
127
127
  /* input関数が見当たりません */
128
128
 
129
- /* そしてinput関数の返り値をstudentsに代入するのはどうなでしょう */
129
+ /* そしてinput関数の返り値をstudentsに代入するのはどうなでしょう */
130
130
 
131
131
  /* input関数の返り値次第ですが,きっとMeibo student; を定義しておいて */
132
132
 

5

コメントスタイルの修正

2015/11/12 22:10

投稿

退会済みユーザー
test CHANGED
@@ -174,7 +174,7 @@
174
174
 
175
175
  // add(students);
176
176
 
177
- // show(students, number); などの関数を作って呼び出しましょう
177
+ /* show(students, number); などの関数を作って呼び出しましょう */
178
178
 
179
179
  break;
180
180
 

4

コードの良し悪しについて追加

2015/11/12 21:57

投稿

退会済みユーザー
test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  /* 問題で最大100と言われているということは */
94
94
 
95
- /* 大きさ100の配列を用意すべきなでしょう */
95
+ /* 大きさ100の配列を用意すべきなでしょう */
96
96
 
97
97
  /* (配列以外にmemory allocationを利用する方法もありますが */
98
98
 
@@ -134,6 +134,8 @@
134
134
 
135
135
  // students = input();
136
136
 
137
+ /* scanf("%d %s %d", &student.number, student.name, student.credits); など */
138
+
137
139
 
138
140
 
139
141
  /* 添え字がおかしいです */
@@ -170,11 +172,15 @@
170
172
 
171
173
  /* 一覧表示は前の課題で適切なものを作ったのでは? */
172
174
 
173
- add(students);
175
+ // add(students);
176
+
177
+ // show(students, number); などの関数を作って呼び出しましょう
174
178
 
175
179
  break;
176
180
 
177
- case '\n':case ' ':
181
+ case '\n':
182
+
183
+ case ' ':
178
184
 
179
185
  break;
180
186
 

3

問題点追加.配列の添え字位置がおかしい

2015/11/12 21:55

投稿

退会済みユーザー
test CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  0. add関数をifの判定式に用いている
16
16
 
17
+ 0. 配列の添え字がおかしい場所がある
18
+
17
19
 
18
20
 
19
21
  あなたのコードの改善案
@@ -26,11 +28,23 @@
26
28
 
27
29
  0. add関数をifの判定式に入れない(add関数の返り値を付けるのも一案ですが,問題に反しますね)
28
30
 
31
+ 0. 配列の添え字を適切に修正する
32
+
29
33
 
30
34
 
31
35
  ```C
32
36
 
33
37
  /* Meibo型の配列を引数に取る関数 */
38
+
39
+ /* 学校の問題なので言っても仕方ないですが */
40
+
41
+ /* C言語では一般に,配列を渡すときに配列の大きさも渡します */
42
+
43
+ /* 受け取る関数内では配列ではなく,ポインタとして受け取るため*/
44
+
45
+ /* sizeofを利用しても配列の大きさを知ることができません */
46
+
47
+ /* void add(Meibo students[], int number) の方が良いコードです*/
34
48
 
35
49
  void add(Meibo students[]){
36
50
 
@@ -74,7 +88,15 @@
74
88
 
75
89
  {
76
90
 
91
+ /* 配列の大きさが4で初期化されます */
77
92
 
93
+ /* 問題で最大100と言われているということは */
94
+
95
+ /* 大きさ100の配列を用意すべきなんでしょう */
96
+
97
+ /* (配列以外にmemory allocationを利用する方法もありますが */
98
+
99
+ /* そのレベルの課題ではないでしょう) */
78
100
 
79
101
  Meibo students[]={
80
102
 
@@ -104,9 +126,21 @@
104
126
 
105
127
  /* input関数が見当たりません */
106
128
 
107
- students = input();
129
+ /* そしてinput関数の返り値をstudentsに代入するのはどうなんでしょう */
108
130
 
131
+ /* input関数の返り値次第ですが,きっとMeibo student; を定義しておいて */
132
+
133
+ /* student = input(); の形になるでしょう */
134
+
135
+ // students = input();
136
+
137
+
138
+
139
+ /* 添え字がおかしいです */
140
+
141
+ // if ( students.name[0] != '\0' ){
142
+
109
- if ( students.name[0] != '\0' ){
143
+ if ( students[0].name != '\0' ){
110
144
 
111
145
  /* あなたの定義した(問題で定義されている)add関数は */
112
146
 

2

コードコメントの追加

2015/11/12 21:46

投稿

退会済みユーザー
test CHANGED
@@ -10,6 +10,10 @@
10
10
 
11
11
  0. 最大100名の追加ができない(配列の大きさが4である)
12
12
 
13
+ 0. input関数がない
14
+
15
+ 0. add関数をifの判定式に用いている
16
+
13
17
 
14
18
 
15
19
  あなたのコードの改善案
@@ -17,6 +21,10 @@
17
21
  0. add関数の中身を適切に変更する(配列studentsに要素を書き込む)
18
22
 
19
23
  0. 最初に大きさ100の配列を確保する
24
+
25
+ 0. input関数を適切に追加する
26
+
27
+ 0. add関数をifの判定式に入れない(add関数の返り値を付けるのも一案ですが,問題に反しますね)
20
28
 
21
29
 
22
30
 
@@ -44,6 +52,8 @@
44
52
 
45
53
  /* 配列中の0-3人目を表示 */
46
54
 
55
+ /* 配列中の要素に応じて,繰り返し回数を変更した方が適切でしょう */
56
+
47
57
  printf("------------------------------------------\n");
48
58
 
49
59
  for (i = 0; i < 4; i++) {
@@ -58,4 +68,98 @@
58
68
 
59
69
  }
60
70
 
71
+
72
+
73
+ int main(void)
74
+
75
+ {
76
+
77
+
78
+
79
+ Meibo students[]={
80
+
81
+ { 1, "John", 30 },
82
+
83
+ { 2, "Paul" ,28 },
84
+
85
+ { 3, "George", 20 },
86
+
87
+ { 4, "Ringo", 40 }
88
+
89
+ };
90
+
91
+
92
+
93
+ char cmd;
94
+
95
+ printf("a:追加 d:一覧表示 q:終了\n");
96
+
97
+ while((cmd = getchar()) != 'q'){
98
+
99
+ switch(cmd){
100
+
101
+ case 'a':
102
+
103
+ //追加(課題2)
104
+
105
+ /* input関数が見当たりません */
106
+
107
+ students = input();
108
+
109
+ if ( students.name[0] != '\0' ){
110
+
111
+ /* あなたの定義した(問題で定義されている)add関数は */
112
+
113
+ /* 返り値がありません(void)でしたね */
114
+
115
+ /* ifの判別式として使うことはできません */
116
+
117
+ if ( add(students))
118
+
119
+ printf("\n\n登録しました\n");
120
+
121
+ else
122
+
123
+ printf("\n\nすでに登録されています\n");
124
+
125
+ }
126
+
127
+ else
128
+
129
+ printf("\n\n入力を中止しました\n");
130
+
131
+ break;
132
+
133
+ case 'd':
134
+
135
+ /* 一覧表示のはずですが,add関数を呼び出しています */
136
+
137
+ /* 一覧表示は前の課題で適切なものを作ったのでは? */
138
+
139
+ add(students);
140
+
141
+ break;
142
+
143
+ case '\n':case ' ':
144
+
145
+ break;
146
+
147
+ default:
148
+
149
+ printf("不正なコマンドです。\n");
150
+
151
+ break;
152
+
153
+ }
154
+
155
+ }
156
+
157
+
158
+
159
+ printf("名簿プログラムを終了します。\n");
160
+
161
+ return 0;
162
+
163
+ }
164
+
61
165
  ```

1

本文追加

2015/11/12 18:37

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,24 @@
1
+ まず,どのようなエラーが出るのかを書きましょう.エラーを明記することで,何に対して悩んでいるのか明確になり,適切な回答が得られやすいです.
2
+
3
+ そして私たちは,課題1について知らないので,課題1についても書きましょう.
4
+
5
+
6
+
7
+ あなたのコードの問題点
8
+
9
+ 0. add関数の中身が適切でない(再帰呼び出しを行っている,目的の動作をしていない)
10
+
11
+ 0. 最大100名の追加ができない(配列の大きさが4である)
12
+
13
+
14
+
15
+ あなたのコードの改善案
16
+
17
+ 0. add関数の中身を適切に変更する(配列studentsに要素を書き込む)
18
+
1
- どういうエラーが出る書きましょう.
19
+ 0. 最初に大きさ100配列確保する
20
+
21
+
2
22
 
3
23
  ```C
4
24