回答編集履歴
6
誤字の修正
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
コメントスタイルの修正
test
CHANGED
@@ -174,7 +174,7 @@
|
|
174
174
|
|
175
175
|
// add(students);
|
176
176
|
|
177
|
-
/
|
177
|
+
/* show(students, number); などの関数を作って呼び出しましょう */
|
178
178
|
|
179
179
|
break;
|
180
180
|
|
4
コードの良し悪しについて追加
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':
|
181
|
+
case '\n':
|
182
|
+
|
183
|
+
case ' ':
|
178
184
|
|
179
185
|
break;
|
180
186
|
|
3
問題点追加.配列の添え字位置がおかしい
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
|
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
|
143
|
+
if ( students[0].name != '\0' ){
|
110
144
|
|
111
145
|
/* あなたの定義した(問題で定義されている)add関数は */
|
112
146
|
|
2
コードコメントの追加
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
本文追加
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
|
|