質問編集履歴

7

書式の改善

2020/07/28 18:22

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
File without changes
test CHANGED
@@ -15,29 +15,3 @@
15
15
 
16
16
 
17
17
  上のように2回目以降0件見つかりましたと検索できなくなります。
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
- ```txt
26
-
27
- 3
28
-
29
- 1000011 東京都千代田区内幸町 TOKYOTOCHIYODAKUUCHISAIWAICHO
30
-
31
- 5730171 大阪府枚方市北山 OSAKAFUHIRAKATASHIKITAYAMA
32
-
33
- 0040021 北海道札幌市厚別区青葉町 HOKKAIDOSAPPOROSHIATSUBETSUKUAOBACHO
34
-
35
- ```
36
-
37
-
38
-
39
- ###開発環境
40
-
41
- bush :シェルスクリプト
42
-
43
- sakura editer :編集

6

書式の改善

2020/07/28 18:22

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
File without changes
test CHANGED
@@ -5,28 +5,6 @@
5
5
  実行すると
6
6
 
7
7
 
8
-
9
- % ./main.exe test.txt
10
-
11
- 1000011 東京都千代田区内幸町
12
-
13
- 5730171 大阪府枚方市北山
14
-
15
- 0040021 北海道札幌市厚別区青葉町
16
-
17
- 郵便番号を入力してください:5730171
18
-
19
- 5730171 大阪府枚方市北山
20
-
21
- 1件見つかりました
22
-
23
- 郵便番号を入力してください:1000011
24
-
25
- 0件見つかりました
26
-
27
- 郵便番号を入力してください:9999999
28
-
29
- 0件見つかりました
30
8
 
31
9
  郵便番号を入力してください:0
32
10
 

5

書式の改善

2020/07/28 18:21

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
File without changes
test CHANGED
@@ -40,339 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- 説明不足な箇所があれば教えてください。説明します。
44
43
 
45
-
46
-
47
-
48
-
49
- ```C
50
-
51
- #include <stdio.h>
52
-
53
- #include <stdlib.h>
54
-
55
- #include <string.h>
56
-
57
- #include "library.h"
58
-
59
-
60
-
61
- struct address {
62
-
63
- char no[8]; /*郵便番号*/
64
-
65
- char addr[205]; /*住所*/
66
-
67
- char yomi[106]; /*読みがな*/
68
-
69
- struct address *next;/*次のリストのアドレス*/
70
-
71
- };
72
-
73
-
74
-
75
- struct address gFront = {{0}, {0}, {0}, NULL}; /*先頭の連結リストを指すポインタの初期化*/
76
-
77
-
78
-
79
- void printList(void){ /*ちゃんと格納されているか確認するため*/
80
-
81
- struct address *p;
82
-
83
-
84
-
85
- printf("LIST[ ");
86
-
87
- p = gFront.next;
88
-
89
- while(p != NULL){
90
-
91
- printf("%s, %s, %s, ",p->no, p->addr, p->yomi);
92
-
93
- p = p->next;
94
-
95
- }
96
-
97
- printf("]\n");
98
-
99
- }
100
-
101
-
102
-
103
- void insert(struct address *pre, struct address *new){ /*後ろに連結させる*/
104
-
105
- new->next = NULL;
106
-
107
- pre->next = new;
108
-
109
- }
110
-
111
-
112
-
113
- void print_address(struct address *p){ /*郵便番号と住所を表示*/
114
-
115
- printf("%s %s\n",p->no, p->addr);
116
-
117
- }
118
-
119
-
120
-
121
- int main(int argc, char *argv[]){
122
-
123
- char n[124270];
124
-
125
- char pos[8];
126
-
127
- char a[8], b[205], c[106];
128
-
129
- struct address *p;
130
-
131
- struct address *tail;
132
-
133
- int N, i, flag=0;
134
-
135
-
136
-
137
-
138
-
139
- if (argc != 2){
140
-
141
- fprintf(stderr, "プログラム引数を 1 つ指定してください\n");
142
-
143
- exit(1);
144
-
145
- }
146
-
147
-
148
-
149
- /*=======txtの情報を連結リストへ========*/
150
-
151
-
152
-
153
- infile_open(argv[1]); /*プログラム引数で呼び出されたtxtファイルを読む準備*/
154
-
155
-
156
-
157
- infile_scanf("%s", n); /*=scanf*/
158
-
159
- N = atoi(n);
160
-
161
- tail = &gFront; /*初期化:連結リストの末尾が先頭を指すポインタのアドレスを示している*/
162
-
163
-
164
-
165
- for(i = 0; i < N; i++){
166
-
167
- infile_scanf("%s", a); /*addressの3メンバをスキャンし、*/
168
-
169
- infile_scanf("%s", b);
170
-
171
- infile_scanf("%s", c);
172
-
173
-
174
-
175
- p = malloc(sizeof(struct address));
176
-
177
- if (p == NULL){
178
-
179
- fprintf(stderr, "エラー: malloc失敗\n");
180
-
181
- exit(1);
182
-
183
- }
184
-
185
-
186
-
187
- strcpy(p->no, a); /*pが指すリストへ格納する*/
188
-
189
- strcpy(p->addr, b);
190
-
191
- strcpy(p->yomi, c);
192
-
193
-
194
-
195
- insert(tail, p); /*それを末尾に連結させる*/
196
-
197
- tail = p;
198
-
199
- print_address(p);
200
-
201
- }
202
-
203
-
204
-
205
- /*==========================郵便番号を捜査===============================*/
206
-
207
-
208
-
209
- printf("郵便番号を入力してください:");
210
-
211
- scanf("%s",pos);
212
-
213
- p = gFront.next;
214
-
215
-
216
-
217
- while(strcmp(pos,"0") != 0){
218
-
219
-
220
-
221
- while(p != NULL){
222
-
223
- if(strcmp(pos, p->no) == 0){
224
-
225
- print_address(p);
226
-
227
- flag++;
228
-
229
- }
230
-
231
- p = p->next;
232
-
233
- }
234
-
235
-
236
-
237
- printf("%d件見つかりました\n",flag);
238
-
239
-
240
-
241
- flag = 0;
242
-
243
- printf("郵便番号を入力してください:");
244
-
245
- scanf("%s", pos);
246
-
247
-
248
-
249
- }
250
-
251
- infile_close();
252
-
253
- printf("プログラムを終了します\n");
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
- return 0;
262
-
263
- }
264
-
265
- ```
266
-
267
-
268
-
269
- ```library
270
-
271
- /* 引数に与えたファイル名のファイルを入力用として内部に開いておく. */
272
-
273
- void infile_open(char *filename){
274
-
275
- static int opennum = 0;
276
-
277
- if (InputFileFp != NULL){
278
-
279
- fprintf(stderr, "エラー: infile_open: 既にファイルを開いています.\n");
280
-
281
- fprintf(stderr, " 2重に開くことはできません.\n");
282
-
283
- exit(1);
284
-
285
- }
286
-
287
-
288
-
289
- if (opennum > 0){
290
-
291
- fprintf(stderr, "エラー: infile_open: ファイルを開けるのは1回だけです.\n");
292
-
293
- exit(1);
294
-
295
- }
296
-
297
-
298
-
299
- InputFileFp = fopen(filename, "r");
300
-
301
- if (InputFileFp == NULL){
302
-
303
- fprintf(stderr, "エラー: infile_open: '%s'を開けませんでした.\n", filename);
304
-
305
- fprintf(stderr, " ファイルが無いかスペルミスしていませんか?\n");
306
-
307
- exit(1);
308
-
309
- }
310
-
311
- opennum++;
312
-
313
- }
314
-
315
-
316
-
317
-
318
-
319
- /* 開いておいた入力ファイルからscanfする.戻り値はscanfと同じ. */
320
-
321
- int infile_scanf(char *format, ...){
322
-
323
- static int eof_read_cnt=0;
324
-
325
- int ret;
326
-
327
- va_list ap;
328
-
329
-
330
-
331
- va_start(ap, format);
332
-
333
- ret = vfscanf(InputFileFp, format, ap);
334
-
335
- va_end(ap);
336
-
337
-
338
-
339
- if (ret == EOF){
340
-
341
- if (eof_read_cnt++ >= 2){
342
-
343
- fprintf(stderr, "警告: infile_scanf: すでにファイルの終端に達していますが\n");
344
-
345
- fprintf(stderr, " 複数回scanfしようとしています\n");
346
-
347
- }
348
-
349
- }
350
-
351
-
352
-
353
- return ret;
354
-
355
- }
356
-
357
-
358
-
359
-
360
-
361
- /* 開いておいた入力ファイルを閉じる. */
362
-
363
- void infile_close(void){
364
-
365
- if (InputFileFp != NULL){
366
-
367
- fclose(InputFileFp);
368
-
369
- InputFileFp = NULL;
370
-
371
- }
372
-
373
- }
374
-
375
- ```
376
44
 
377
45
 
378
46
 

4

flagの初期化修正

2020/07/28 15:40

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
File without changes
test CHANGED
@@ -14,27 +14,29 @@
14
14
 
15
15
  0040021 北海道札幌市厚別区青葉町
16
16
 
17
+ 郵便番号を入力してください:5730171
18
+
19
+ 5730171 大阪府枚方市北山
20
+
21
+ 1件見つかりました
22
+
23
+ 郵便番号を入力してください:1000011
24
+
25
+ 0件見つかりました
26
+
27
+ 郵便番号を入力してください:9999999
28
+
29
+ 0件見つかりました
30
+
17
- 郵便番号を入力してください:
31
+ 郵便番号を入力してください:0
18
-
19
-
20
-
21
- まではいいのですが1000011を入力すると
32
+
22
-
23
-
24
-
25
- 警告: infile_scanf: すでにファイルの終端に達していますが
26
-
27
- 複数回scanfようとしています
33
+ プログラムを終了します
28
-
29
- 警告: infile_scanf: すでにファイルの終端に達していますが
34
+
30
-
31
- 複数回scanfしようとしています
35
+ %
32
-
33
- ▒▒かりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました
36
+
34
-
35
-
36
-
37
+
38
+
37
- のようなエラーがエンドレス出ててしいます。
39
+ のように2回目以降0件見つかりましたと検索できなくなります。
38
40
 
39
41
 
40
42
 
@@ -42,8 +44,6 @@
42
44
 
43
45
 
44
46
 
45
- ![イメージ説明](4c293c2b955e7d75f28c3e76df8cb904.png)
46
-
47
47
 
48
48
 
49
49
  ```C
@@ -76,6 +76,30 @@
76
76
 
77
77
 
78
78
 
79
+ void printList(void){ /*ちゃんと格納されているか確認するため*/
80
+
81
+ struct address *p;
82
+
83
+
84
+
85
+ printf("LIST[ ");
86
+
87
+ p = gFront.next;
88
+
89
+ while(p != NULL){
90
+
91
+ printf("%s, %s, %s, ",p->no, p->addr, p->yomi);
92
+
93
+ p = p->next;
94
+
95
+ }
96
+
97
+ printf("]\n");
98
+
99
+ }
100
+
101
+
102
+
79
103
  void insert(struct address *pre, struct address *new){ /*後ろに連結させる*/
80
104
 
81
105
  new->next = NULL;
@@ -122,7 +146,7 @@
122
146
 
123
147
 
124
148
 
125
- /*=======txtの情報を連結リストへ========リストへの格納は動作確認済み*/  
149
+ /*=======txtの情報を連結リストへ========*/
126
150
 
127
151
 
128
152
 
@@ -178,7 +202,7 @@
178
202
 
179
203
 
180
204
 
181
- /*========郵便番号を捜査============*/
205
+ /*==========================郵便番号を捜査===============================*/
182
206
 
183
207
 
184
208
 
@@ -186,23 +210,21 @@
186
210
 
187
211
  scanf("%s",pos);
188
212
 
189
-
190
-
191
213
  p = gFront.next;
192
214
 
193
215
 
194
216
 
195
- while(strcmp(pos,"0") != 0){     /*0が入力されるまで検索を続ける*/
217
+ while(strcmp(pos,"0") != 0){
196
-
197
-
198
-
218
+
219
+
220
+
199
- while(p != NULL){             /*リストの最後まで*/
221
+ while(p != NULL){
200
-
222
+
201
- if(strcmp(pos, p->no) == 0){     
223
+ if(strcmp(pos, p->no) == 0){
202
224
 
203
225
  print_address(p);
204
226
 
205
- flag++; /該当するものがあったらflagを増やす/
227
+ flag++;
206
228
 
207
229
  }
208
230
 
@@ -212,11 +234,15 @@
212
234
 
213
235
 
214
236
 
215
- printf("%d件見つかりました",flag);
237
+ printf("%d件見つかりました\n",flag);
238
+
239
+
240
+
216
-
241
+ flag = 0;
242
+
217
-
243
+ printf("郵便番号を入力してください:");
218
-
244
+
219
- infile_scanf("%s", pos);
245
+ scanf("%s", pos);
220
246
 
221
247
 
222
248
 
@@ -224,10 +250,14 @@
224
250
 
225
251
  infile_close();
226
252
 
227
- printf("プログラムを終了します");
253
+ printf("プログラムを終了します\n");
254
+
255
+
228
256
 
229
257
 
230
258
 
259
+
260
+
231
261
  return 0;
232
262
 
233
263
  }

3

新しくつまずいたところを追加

2020/07/28 15:28

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
@@ -1 +1 @@
1
- txtの情報を連結リストに格納したセグメントエラーで詰んで
1
+ 連結リストで該当したものをprintしなら捜査をつづけた
test CHANGED
@@ -1,20 +1,40 @@
1
1
  ### 現状説明
2
2
 
3
- txtの情報を連結リストに格納したいのでが以下のようにプログラムした
3
+ txtの情報を連結リストに格納して、郵便番号を入力するとその郵便番号と住所と何件表示されかを出力プログラムを作ってい
4
-
4
+
5
- コンパイルは成功したのですが、実行するとセグメントエラーとなりました。
5
+ 実行すると
6
6
 
7
7
 
8
8
 
9
9
  % ./main.exe test.txt
10
10
 
11
+ 1000011 東京都千代田区内幸町
12
+
13
+ 5730171 大阪府枚方市北山
14
+
15
+ 0040021 北海道札幌市厚別区青葉町
16
+
11
- セグメントエラー
17
+ 郵便番号を入力してください:
18
+
19
+
20
+
12
-
21
+ まではいいのですが1000011を入力すると
22
+
23
+
24
+
13
-
25
+ 警告: infile_scanf: すでにファイルの終端に達していますが
26
+
14
-
27
+ 複数回scanfしようとしています
28
+
29
+ 警告: infile_scanf: すでにファイルの終端に達していますが
30
+
31
+ 複数回scanfしようとしています
32
+
33
+ ▒▒かりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました0件見つかりました
34
+
35
+
36
+
15
- 修正するヒトがないの詰まってます。
37
+ のようなエラーがエドレスきてしいます。
16
-
17
- printfをちりばめてもセグメントエラーです。
18
38
 
19
39
 
20
40
 
@@ -34,7 +54,7 @@
34
54
 
35
55
  #include <string.h>
36
56
 
37
- #include "libraly.h" /*infile_open、infile_close、 infile_scanfはlibraly.hから提供されているもので間違ってはないです*/
57
+ #include "library.h"
38
58
 
39
59
 
40
60
 
@@ -56,133 +76,269 @@
56
76
 
57
77
 
58
78
 
79
+ void insert(struct address *pre, struct address *new){ /*後ろに連結させる*/
80
+
81
+ new->next = NULL;
82
+
83
+ pre->next = new;
84
+
85
+ }
86
+
87
+
88
+
59
- void printList(void){ /*ちゃん格納されているか確認するため*/
89
+ void print_address(struct address *p){ /*郵便番号住所を表示*/
90
+
91
+ printf("%s %s\n",p->no, p->addr);
92
+
93
+ }
94
+
95
+
96
+
97
+ int main(int argc, char *argv[]){
98
+
99
+ char n[124270];
100
+
101
+ char pos[8];
102
+
103
+ char a[8], b[205], c[106];
60
104
 
61
105
  struct address *p;
62
106
 
63
-
107
+ struct address *tail;
108
+
64
-
109
+ int N, i, flag=0;
110
+
111
+
112
+
113
+
114
+
115
+ if (argc != 2){
116
+
117
+ fprintf(stderr, "プログラム引数を 1 つ指定してください\n");
118
+
119
+ exit(1);
120
+
121
+ }
122
+
123
+
124
+
125
+ /*=======txtの情報を連結リストへ========リストへの格納は動作確認済み*/  
126
+
127
+
128
+
129
+ infile_open(argv[1]); /*プログラム引数で呼び出されたtxtファイルを読む準備*/
130
+
131
+
132
+
133
+ infile_scanf("%s", n); /*=scanf*/
134
+
135
+ N = atoi(n);
136
+
137
+ tail = &gFront; /*初期化:連結リストの末尾が先頭を指すポインタのアドレスを示している*/
138
+
139
+
140
+
141
+ for(i = 0; i < N; i++){
142
+
143
+ infile_scanf("%s", a); /*addressの3メンバをスキャンし、*/
144
+
145
+ infile_scanf("%s", b);
146
+
147
+ infile_scanf("%s", c);
148
+
149
+
150
+
151
+ p = malloc(sizeof(struct address));
152
+
153
+ if (p == NULL){
154
+
155
+ fprintf(stderr, "エラー: malloc失敗\n");
156
+
157
+ exit(1);
158
+
159
+ }
160
+
161
+
162
+
163
+ strcpy(p->no, a); /*pが指すリストへ格納する*/
164
+
165
+ strcpy(p->addr, b);
166
+
167
+ strcpy(p->yomi, c);
168
+
169
+
170
+
171
+ insert(tail, p); /*それを末尾に連結させる*/
172
+
173
+ tail = p;
174
+
175
+ print_address(p);
176
+
177
+ }
178
+
179
+
180
+
181
+ /*========郵便番号を捜査============*/
182
+
183
+
184
+
65
- printf("LIST[ ");
185
+ printf("郵便番号を入力してください:");
186
+
187
+ scanf("%s",pos);
188
+
189
+
66
190
 
67
191
  p = gFront.next;
68
192
 
69
- while(p != NULL){
70
-
71
- printf("%s, %s, %s, ",p->no, p->addr, p->yomi);
72
-
73
- p = p->next;
74
-
75
- }
76
-
77
- printf("]\n");
78
-
79
- }
80
-
81
-
82
-
83
- void insert(struct address *pre, struct address *new){ /*後ろに連結させる*/
84
-
85
- new->next = NULL;
86
-
87
- pre->next = new;
88
-
89
- }
90
-
91
-
92
-
93
- void print_address(struct address *p){ /*郵便番号と住所を表示*/
94
-
95
- printf("%s %s\n",p->no, p->addr);
96
-
97
- }
98
-
99
-
100
-
101
- int main(int argc, char *argv[]){
102
-
103
- char *n = 0;
104
-
105
- char *a = 0, *b = 0, *c = 0;
106
-
107
- struct address *p;
108
-
109
- struct address *tail;
110
-
111
- int N, i;
112
-
113
-
114
-
115
-
116
-
117
- if (argc != 2){
118
-
119
- fprintf(stderr, "プログラム引数を 1 つ指定してください\n");
193
+
194
+
195
+ while(strcmp(pos,"0") != 0){     /*0が入力されるまで検索を続ける*/
196
+
197
+
198
+
199
+ while(p != NULL){             /*リストの最後まで*/
200
+
201
+ if(strcmp(pos, p->no) == 0){     
202
+
203
+ print_address(p);
204
+
205
+ flag++; /該当するものがあったらflagを増やす/
206
+
207
+ }
208
+
209
+ p = p->next;
210
+
211
+ }
212
+
213
+
214
+
215
+ printf("%d件見つかりました",flag);
216
+
217
+
218
+
219
+ infile_scanf("%s", pos);
220
+
221
+
222
+
223
+ }
224
+
225
+ infile_close();
226
+
227
+ printf("プログラムを終了します");
228
+
229
+
230
+
231
+ return 0;
232
+
233
+ }
234
+
235
+ ```
236
+
237
+
238
+
239
+ ```library
240
+
241
+ /* 引数に与えたファイル名のファイルを入力用として内部に開いておく. */
242
+
243
+ void infile_open(char *filename){
244
+
245
+ static int opennum = 0;
246
+
247
+ if (InputFileFp != NULL){
248
+
249
+ fprintf(stderr, "エラー: infile_open: 既にファイルを開いています.\n");
250
+
251
+ fprintf(stderr, " 2重に開くことはできません.\n");
120
252
 
121
253
  exit(1);
122
254
 
123
255
  }
124
256
 
125
-
126
-
127
- /*=======txtの情報を連結リストへ========*/
257
+
128
-
129
-
130
-
131
- infile_open(argv[1]); /*プログラム引数で呼び出されたtxtファイルを読む準備*/
258
+
132
-
133
-
134
-
135
- infile_scanf("%s", n); /*=scanf*/
136
-
137
- N = atoi(n);
138
-
139
- tail = &gFront; /*初期化:連結リストの末尾が先頭を指すポインタのアドレスを示している*/
140
-
141
-
142
-
143
- for(i = 0; i < N; i++){
144
-
145
- infile_scanf("%s", a); /*addressの3メンバをスキャンし、*/
146
-
147
- infile_scanf("%s", b);
148
-
149
- infile_scanf("%s", c);
150
-
151
-
152
-
153
- p = malloc(sizeof(struct address));
154
-
155
- if (p == NULL){
259
+ if (opennum > 0){
156
-
260
+
157
- fprintf(stderr, "エラー: malloc失敗\n");
261
+ fprintf(stderr, "エラー: infile_open: ファイルを開けるのは1回だけです.\n");
158
-
262
+
159
- exit(1);
263
+ exit(1);
264
+
265
+ }
266
+
267
+
268
+
269
+ InputFileFp = fopen(filename, "r");
270
+
271
+ if (InputFileFp == NULL){
272
+
273
+ fprintf(stderr, "エラー: infile_open: '%s'を開けませんでした.\n", filename);
274
+
275
+ fprintf(stderr, " ファイルが無いかスペルミスしていませんか?\n");
276
+
277
+ exit(1);
278
+
279
+ }
280
+
281
+ opennum++;
282
+
283
+ }
284
+
285
+
286
+
287
+
288
+
289
+ /* 開いておいた入力ファイルからscanfする.戻り値はscanfと同じ. */
290
+
291
+ int infile_scanf(char *format, ...){
292
+
293
+ static int eof_read_cnt=0;
294
+
295
+ int ret;
296
+
297
+ va_list ap;
298
+
299
+
300
+
301
+ va_start(ap, format);
302
+
303
+ ret = vfscanf(InputFileFp, format, ap);
304
+
305
+ va_end(ap);
306
+
307
+
308
+
309
+ if (ret == EOF){
310
+
311
+ if (eof_read_cnt++ >= 2){
312
+
313
+ fprintf(stderr, "警告: infile_scanf: すでにファイルの終端に達していますが\n");
314
+
315
+ fprintf(stderr, " 複数回scanfしようとしています\n");
160
316
 
161
317
  }
162
318
 
163
-
164
-
165
- strcpy(p->no, a); /*pが指すリストへ格納する*/
166
-
167
- strcpy(p->addr, b);
168
-
169
- strcpy(p->yomi, c);
170
-
171
-
172
-
173
- insert(tail, p); /*それを末尾に連結させる*/
174
-
175
- tail = p;
176
-
177
- printList();
178
-
179
- }
319
+ }
180
-
181
-    infile_close();          /*参照したtxtファイルを閉じる*/
320
+
182
-
183
-
184
-
321
+
322
+
185
- return 0;
323
+ return ret;
324
+
325
+ }
326
+
327
+
328
+
329
+
330
+
331
+ /* 開いておいた入力ファイルを閉じる. */
332
+
333
+ void infile_close(void){
334
+
335
+ if (InputFileFp != NULL){
336
+
337
+ fclose(InputFileFp);
338
+
339
+ InputFileFp = NULL;
340
+
341
+ }
186
342
 
187
343
  }
188
344
 

2

イメージ図の挿入

2020/07/28 11:37

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- 自分ではこれでちゃんと動くと思うのですが....
25
+ ![イメージ説明](4c293c2b955e7d75f28c3e76df8cb904.png)
26
26
 
27
27
 
28
28
 

1

修正依頼に対応,main内のchar型のa,b,c,nの初期化をNULLから0に

2020/07/28 10:17

投稿

German_p0tat0
German_p0tat0

スコア26

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,14 @@
4
4
 
5
5
  コンパイルは成功したのですが、実行するとセグメントエラーとなりました。
6
6
 
7
+
8
+
9
+ % ./main.exe test.txt
10
+
11
+ セグメントエラー
12
+
13
+
14
+
7
15
  修正するヒントがないので詰まってます。
8
16
 
9
17
  printfをちりばめてもセグメントエラーです。
@@ -20,15 +28,25 @@
20
28
 
21
29
  ```C
22
30
 
31
+ #include <stdio.h>
32
+
33
+ #include <stdlib.h>
34
+
35
+ #include <string.h>
36
+
37
+ #include "libraly.h" /*infile_open、infile_close、 infile_scanfはlibraly.hから提供されているもので間違ってはないです*/
38
+
39
+
40
+
23
41
  struct address {
24
42
 
25
- char no[8];   /*郵便番号*/
43
+ char no[8]; /*郵便番号*/
26
-
44
+
27
- char addr[205];   /*住所*/
45
+ char addr[205]; /*住所*/
28
-
46
+
29
- char yomi[106];    /*読みがな*/
47
+ char yomi[106]; /*読みがな*/
30
-
48
+
31
- struct address *next;  /*次のリストのアドレス*/
49
+ struct address *next;/*次のリストのアドレス*/
32
50
 
33
51
  };
34
52
 
@@ -80,17 +98,11 @@
80
98
 
81
99
 
82
100
 
83
-
84
-
85
-
86
-
87
-
88
-
89
101
  int main(int argc, char *argv[]){
90
102
 
91
- char *n = NULL;
103
+ char *n = 0;
92
-
104
+
93
- char *a = NULL, *b = NULL, *c = NULL;
105
+ char *a = 0, *b = 0, *c = 0;
94
106
 
95
107
  struct address *p;
96
108
 
@@ -166,6 +178,8 @@
166
178
 
167
179
  }
168
180
 
181
+    infile_close();          /*参照したtxtファイルを閉じる*/
182
+
169
183
 
170
184
 
171
185
  return 0;
@@ -187,3 +201,11 @@
187
201
  0040021 北海道札幌市厚別区青葉町 HOKKAIDOSAPPOROSHIATSUBETSUKUAOBACHO
188
202
 
189
203
  ```
204
+
205
+
206
+
207
+ ###開発環境
208
+
209
+ bush :シェルスクリプト
210
+
211
+ sakura editer :編集