質問編集履歴

1

質問の情報量を増やしました。また、何ができて何ができていないのかについてできるだけ記載しました。

2018/12/02 09:06

投稿

aiueo12345
aiueo12345

スコア41

test CHANGED
@@ -1 +1 @@
1
- スで区切られた複数の数字読み込みたい
1
+ 二つのテキトファイル内のデ合算するプログラム
test CHANGED
@@ -1,28 +1,102 @@
1
+ ### 前提・実現したいこと
2
+
3
+
4
+
5
+ 二つのテキストファイル(data1.txtとdata2.txt)内のデータを合算して新たな別のテキストファイル(data3.txt)に出力するプログラムを書きたいと考えています。
6
+
1
- 以下示すよテキストファイルから数字を読み込みたいと考えています。
7
+ 具体的うテキストファイルには一行に1データずつ、
8
+
2
-
9
+ [コードネーム] [スコア]
10
+
11
+ のようにあり、二つのテキストファイル内で同じコードネームのスコアを合計し、そのスコアを新たなテキストファイルに出力します。
12
+
13
+ 例)
14
+
15
+ data1.txt
16
+
3
- ```
17
+ ```
4
-
18
+
5
- 0001 34
19
+ 0001 19
6
-
20
+
7
- 0002 61
21
+ 0013 13
22
+
8
-
23
+ 0029 24
24
+
25
+ 0048 9
26
+
9
- 0003 6
27
+ 0052 6
28
+
10
-
29
+ 0070 7
30
+
31
+ 0074 34
32
+
33
+ 0149 21
34
+
11
- 0004 8
35
+ 0203 8
12
-
36
+
13
- 0005 56
37
+ 0226 1
38
+
14
-
39
+ 1129 36
40
+
41
+ 1802 7
42
+
43
+ 2207 9
44
+
15
- ```
45
+ ```
46
+
16
-
47
+ data2.txt
48
+
49
+ ```
50
+
51
+ 0048 6
52
+
53
+ 0074 5
54
+
55
+ 0142 22
56
+
57
+ 0326 44
58
+
59
+ ```
60
+
17
- 例えば、『int data[3];』を定義し、data[0]=1、data[1]=61のように読み込みたいと考えています。
61
+ data3.txt
62
+
18
-
63
+ ```
64
+
65
+ 0001 19
66
+
67
+ 0013 13
68
+
69
+ 0029 24
70
+
71
+ 0048 15
72
+
73
+ 0052 6
74
+
75
+ 0070 7
76
+
77
+ 0074 39
78
+
79
+ 0142 22
80
+
81
+ 0149 21
82
+
83
+ 0203 8
84
+
85
+ 0226 1
86
+
87
+ 0326 44
88
+
89
+ 1129 36
90
+
91
+ 1802 7
92
+
93
+ 2207 9
94
+
95
+ ```
96
+
97
+
98
+
19
- (その後data[]使いわして2行目以降を読み込む
99
+ 作っているプログラム以下に示し
20
-
21
-
22
-
23
-
24
-
25
- 以下のようなプログラムを考えた場合、★★★★★部分にどのようか関数を用いれば読み込めるでしょうか。
26
100
 
27
101
  ```
28
102
 
@@ -30,30 +104,518 @@
30
104
 
31
105
  #include <stdlib.h>
32
106
 
107
+
108
+
33
- int main(void)
109
+ int main(int argc,char *argv[])
34
110
 
35
111
  {
36
112
 
37
- FILE *fp;
113
+ FILE *fp1,*fp2,*fp3;
114
+
38
-
115
+ char string1[5],string2[5];
116
+
39
- if((fp=fopen("test.txt","r"))==NULL)
117
+ int figure1[3],figure2[3],i,n,a;
118
+
119
+
120
+
121
+ if(argc!=3)
40
122
 
41
123
  {
42
124
 
43
- fprintf(stdout,"エラー\n");
125
+ fprintf(stderr,"エラー\n");
44
-
126
+
45
- exsit (1);
127
+ exit (1);
46
128
 
47
129
  }
48
130
 
49
-
50
-
51
- /*★★★★★*/
52
-
53
-
54
-
55
- fclose(fp);
131
+ if((fp1=fopen(argv[1],"r"))==NULL)
132
+
133
+ {
134
+
135
+ fprintf(stderr,"エラー:ファイル%sを読み込めませんでした。\n",argv[1]);
136
+
137
+ exit (1);
138
+
139
+ }
140
+
141
+ if((fp2=fopen(argv[2],"r"))==NULL)
142
+
143
+ {
144
+
145
+ fprintf(stderr,"エラー:ファイル%sを読み込めませんでした。\n",argv[2]);
146
+
147
+ exit (1);
148
+
149
+ }
150
+
151
+ fp3=fopen("zaiko_new.txt","w");
152
+
153
+
154
+
155
+
156
+
157
+ fscanf(fp1,"%s",string1);
158
+
159
+ i=0;
160
+
161
+ n=0;
162
+
163
+ while(string1[i++]=='0')
164
+
165
+ n++;
166
+
167
+ a=4-n;
168
+
169
+ if(a==0)
170
+
171
+ figure1[0]=0;
172
+
173
+ else if(a==1)
174
+
175
+ figure1[0]=string1[3]-'0';
176
+
177
+ else if(a==2)
178
+
179
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10;
180
+
181
+ else if(a==3)
182
+
183
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100;
184
+
185
+ else if(a==4)
186
+
187
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100+(string1[0]-'0')*1000;
188
+
189
+
190
+
191
+ fscanf(fp1,"%s",string1);
192
+
193
+ i=0;
194
+
195
+ n=0;
196
+
197
+ while(string1[i++]!='0')
198
+
199
+ n++;
200
+
201
+ if(n==0)
202
+
203
+ figure1[1]=0;
204
+
205
+ else if(n==1)
206
+
207
+ figure1[1]=string1[1]-'0';
208
+
209
+ else if(n==2)
210
+
211
+ figure1[1]=string1[1]-'0'+(string1[0]-'0')*10;
212
+
213
+
214
+
215
+
216
+
217
+ fscanf(fp2,"%s",string2);
218
+
219
+ i=0;
220
+
221
+ n=0;
222
+
223
+ while(string2[i++]!='0')
224
+
225
+ n++;
226
+
227
+ a=4-n;
228
+
229
+ if(a==0)
230
+
231
+ figure2[0]=0;
232
+
233
+ else if(a==1)
234
+
235
+ figure2[0]=string2[3]-'0';
236
+
237
+ else if(a==2)
238
+
239
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10;
240
+
241
+ else if(a==3)
242
+
243
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100;
244
+
245
+ else if(a==4)
246
+
247
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100+(string2[0]-'0')*1000;
248
+
249
+
250
+
251
+ fscanf(fp2,"%s",string2);
252
+
253
+ i=0;
254
+
255
+ n=0;
256
+
257
+ while(string2[i++]!='0')
258
+
259
+ n++;
260
+
261
+ if(n==0)
262
+
263
+ figure2[1]=0;
264
+
265
+ else if(n==1)
266
+
267
+ figure2[1]=string1[1]-'0';
268
+
269
+ else if(n==2)
270
+
271
+ figure2[1]=string1[1]-'0'+(string1[0]-'0')*10;
272
+
273
+
274
+
275
+
276
+
277
+ while((fscanf(fp1,"%s",string1[0])!=EOF)&&(fscanf(fp2,"%s",string2[0])!=EOF))
278
+
279
+ {
280
+
281
+ if(figure1[0]==figure2[0])
282
+
283
+ {
284
+
285
+ fprintf(fp3,"%s %d\n",figure1[0],figure1[1]+figure2[1]);
286
+
287
+
288
+
289
+
290
+
291
+ fscanf(fp1,"%s",string1);
292
+
293
+ i=0;
294
+
295
+ n=0;
296
+
297
+ while(string1[i++]=='0')
298
+
299
+ n++;
300
+
301
+ a=4-n;
302
+
303
+ if(a==0)
304
+
305
+ figure1[0]=0;
306
+
307
+ else if(a==1)
308
+
309
+ figure1[0]=string1[3]-'0';
310
+
311
+ else if(a==2)
312
+
313
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10;
314
+
315
+ else if(a==3)
316
+
317
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100;
318
+
319
+ else if(a==4)
320
+
321
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100+(string1[0]-'0')*1000;
322
+
323
+
324
+
325
+
326
+
327
+ fscanf(fp1,"%s",string1);
328
+
329
+ i=0;
330
+
331
+ n=0;
332
+
333
+ while(string1[i++]!='0')
334
+
335
+ n++;
336
+
337
+ if(n==0)
338
+
339
+ figure1[1]=0;
340
+
341
+ else if(n==1)
342
+
343
+ figure1[1]=string1[1]-'0';
344
+
345
+ else if(n==2)
346
+
347
+ figure1[1]=string1[1]-'0'+(string1[0]-'0')*10;
348
+
349
+
350
+
351
+
352
+
353
+ fscanf(fp2,"%s",string2);
354
+
355
+ i=0;
356
+
357
+ n=0;
358
+
359
+ while(string2[i++]!='0')
360
+
361
+ n++;
362
+
363
+ a=4-n;
364
+
365
+ if(a==0)
366
+
367
+ figure2[0]=0;
368
+
369
+ else if(a==1)
370
+
371
+ figure2[0]=string2[3]-'0';
372
+
373
+ else if(a==2)
374
+
375
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10;
376
+
377
+ else if(a==3)
378
+
379
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100;
380
+
381
+ else if(a==4)
382
+
383
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100+(string2[0]-'0')*1000;
384
+
385
+
386
+
387
+
388
+
389
+ fscanf(fp2,"%s",string2);
390
+
391
+ i=0;
392
+
393
+ n=0;
394
+
395
+ while(string2[i++]!='0')
396
+
397
+ n++;
398
+
399
+ if(n==0)
400
+
401
+ figure2[1]=0;
402
+
403
+ else if(n==1)
404
+
405
+ figure2[1]=string1[1]-'0';
406
+
407
+ else if(n==2)
408
+
409
+ figure2[1]=string1[1]-'0'+(string1[0]-'0')*10;
410
+
411
+ }
412
+
413
+
414
+
415
+
416
+
417
+ else if(figure1[0]<figure2[0])
418
+
419
+ {
420
+
421
+ fprintf(fp3,"%s %d\n",figure1[0],figure1[1]);
422
+
423
+
424
+
425
+
426
+
427
+ fscanf(fp1,"%s",string1);
428
+
429
+ i=0;
430
+
431
+ n=0;
432
+
433
+ while(string1[i++]=='0')
434
+
435
+ n++;
436
+
437
+ a=4-n;
438
+
439
+ if(a==0)
440
+
441
+ figure1[0]=0;
442
+
443
+ else if(a==1)
444
+
445
+ figure1[0]=string1[3]-'0';
446
+
447
+ else if(a==2)
448
+
449
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10;
450
+
451
+ else if(a==3)
452
+
453
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100;
454
+
455
+ else if(a==4)
456
+
457
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100+(string1[0]-'0')*1000;
458
+
459
+
460
+
461
+
462
+
463
+ fscanf(fp1,"%s",string1);
464
+
465
+ i=0;
466
+
467
+ n=0;
468
+
469
+ while(string1[i++]!='0')
470
+
471
+ n++;
472
+
473
+ if(n==0)
474
+
475
+ figure1[1]=0;
476
+
477
+ else if(n==1)
478
+
479
+ figure1[1]=string1[1]-'0';
480
+
481
+ else if(n==2)
482
+
483
+ figure1[1]=string1[1]-'0'+(string1[0]-'0')*10;
484
+
485
+ }
486
+
487
+
488
+
489
+
490
+
491
+ else if(figure1[0]>figure2[0])
492
+
493
+ {
494
+
495
+ fprintf(fp3,"%s &d\n",figure2[0],figure2[1]);
496
+
497
+
498
+
499
+
500
+
501
+ fscanf(fp2,"%s",string2);
502
+
503
+ i=0;
504
+
505
+ n=0;
506
+
507
+ while(string2[i++]!='0')
508
+
509
+ n++;
510
+
511
+ a=4-n;
512
+
513
+ if(a==0)
514
+
515
+ figure2[0]=0;
516
+
517
+ else if(a==1)
518
+
519
+ figure2[0]=string2[3]-'0';
520
+
521
+ else if(a==2)
522
+
523
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10;
524
+
525
+ else if(a==3)
526
+
527
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100;
528
+
529
+ else if(a==4)
530
+
531
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100+(string2[0]-'0')*1000;
532
+
533
+
534
+
535
+
536
+
537
+ fscanf(fp2,"%s",string2);
538
+
539
+ i=0;
540
+
541
+ n=0;
542
+
543
+ while(string2[i++]!='0')
544
+
545
+ n++;
546
+
547
+ if(n==0)
548
+
549
+ figure2[1]=0;
550
+
551
+ else if(n==1)
552
+
553
+ figure2[1]=string1[1]-'0';
554
+
555
+ else if(n==2)
556
+
557
+ figure2[1]=string1[1]-'0'+(string1[0]-'0')*10;
558
+
559
+ }
560
+
561
+ }
562
+
563
+
564
+
565
+
566
+
567
+ fclose(fp1);
568
+
569
+ fclose(fp2);
570
+
571
+ fclose(fp3);
56
572
 
57
573
  }
58
574
 
59
575
  ```
576
+
577
+
578
+
579
+ ### 発生している問題・エラーメッセージ
580
+
581
+
582
+
583
+ 上のプログラムをdata1.txtとdata2.txtについて実行してみたところ(コンパイルは通りました)、
584
+
585
+ 比較部分が繰り返されることなく終わってしまいました。
586
+
587
+ また読み込み状況を確認してみたところ、
588
+
589
+ string1=0001
590
+
591
+ a=1
592
+
593
+ figure1[0]=1
594
+
595
+ string1=19
596
+
597
+ n=5645
598
+
599
+ figure1[1]=1600061541
600
+
601
+ string2=0048
602
+
603
+ a=4
604
+
605
+ figure2[0]=48
606
+
607
+ string2=6
608
+
609
+ n=5661
610
+
611
+ figure2[1]=0
612
+
613
+ となっており、charで読み込んだ文字列を数字にした時の桁数が正しく読み込めていませんでした。
614
+
615
+
616
+
617
+ どのように変更すれば上手く実行できるでしょうか。
618
+
619
+
620
+
621
+ 大変長いプログラムで申し訳ないのですが、回答よろしくお願いします。