teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

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

2018/12/02 09:06

投稿

aiueo12345
aiueo12345

スコア41

title CHANGED
@@ -1,1 +1,1 @@
1
- ペースで区切られた複数数字読み込みたい
1
+ 二つのテキトファイル内データ合算するプログラム
body CHANGED
@@ -1,30 +1,311 @@
1
+ ### 前提・実現したいこと
2
+
3
+ 二つのテキストファイル(data1.txtとdata2.txt)内のデータを合算して新たな別のテキストファイル(data3.txt)に出力するプログラムを書きたいと考えています。
1
- 以下示すよテキストファイルから数字を読み込みたいと考えています。
4
+ 具体的うテキストファイルには一行に1データずつ、
5
+ [コードネーム] [スコア]
6
+ のようにあり、二つのテキストファイル内で同じコードネームのスコアを合計し、そのスコアを新たなテキストファイルに出力します。
7
+ 例)
8
+ data1.txt
2
9
  ```
3
- 0001 34
10
+ 0001 19
4
- 0002 61
11
+ 0013 13
12
+ 0029 24
13
+ 0048 9
5
- 0003 6
14
+ 0052 6
15
+ 0070 7
16
+ 0074 34
17
+ 0149 21
6
- 0004 8
18
+ 0203 8
7
- 0005 56
19
+ 0226 1
20
+ 1129 36
21
+ 1802 7
22
+ 2207 9
8
23
  ```
9
- 例えば、『int data[3];』を定義し、data[0]=1、data[1]=61のように読み込みたいと考えています。
10
- (その後data[]を使いまわして2行目以降を読み込む。)
24
+ data2.txt
25
+ ```
26
+ 0048 6
27
+ 0074 5
28
+ 0142 22
29
+ 0326 44
30
+ ```
31
+ data3.txt
32
+ ```
33
+ 0001 19
34
+ 0013 13
35
+ 0029 24
36
+ 0048 15
37
+ 0052 6
38
+ 0070 7
39
+ 0074 39
40
+ 0142 22
41
+ 0149 21
42
+ 0203 8
43
+ 0226 1
44
+ 0326 44
45
+ 1129 36
46
+ 1802 7
47
+ 2207 9
48
+ ```
11
49
 
12
-
13
- 以下のようなプログラムを考えた場合、★★★★★部分どのようか関数を用いれば読み込めるでょうか
50
+ 作っているプログラムを以下ます
14
51
  ```
15
52
  #include <stdio.h>
16
53
  #include <stdlib.h>
54
+
17
- int main(void)
55
+ int main(int argc,char *argv[])
18
56
  {
19
- FILE *fp;
57
+ FILE *fp1,*fp2,*fp3;
58
+ char string1[5],string2[5];
20
- if((fp=fopen("test.txt","r"))==NULL)
59
+ int figure1[3],figure2[3],i,n,a;
60
+
61
+ if(argc!=3)
21
62
  {
22
- fprintf(stdout,"エラー\n");
63
+ fprintf(stderr,"エラー\n");
23
- exsit (1);
64
+ exit (1);
24
65
  }
66
+ if((fp1=fopen(argv[1],"r"))==NULL)
67
+ {
68
+ fprintf(stderr,"エラー:ファイル%sを読み込めませんでした。\n",argv[1]);
69
+ exit (1);
70
+ }
71
+ if((fp2=fopen(argv[2],"r"))==NULL)
72
+ {
73
+ fprintf(stderr,"エラー:ファイル%sを読み込めませんでした。\n",argv[2]);
74
+ exit (1);
75
+ }
76
+ fp3=fopen("zaiko_new.txt","w");
25
77
 
26
- /*★★★★★*/
27
78
 
79
+ fscanf(fp1,"%s",string1);
80
+ i=0;
81
+ n=0;
82
+ while(string1[i++]=='0')
83
+ n++;
84
+ a=4-n;
85
+ if(a==0)
86
+ figure1[0]=0;
87
+ else if(a==1)
88
+ figure1[0]=string1[3]-'0';
89
+ else if(a==2)
90
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10;
91
+ else if(a==3)
92
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100;
93
+ else if(a==4)
94
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100+(string1[0]-'0')*1000;
95
+
96
+ fscanf(fp1,"%s",string1);
97
+ i=0;
98
+ n=0;
99
+ while(string1[i++]!='0')
100
+ n++;
101
+ if(n==0)
102
+ figure1[1]=0;
103
+ else if(n==1)
104
+ figure1[1]=string1[1]-'0';
105
+ else if(n==2)
106
+ figure1[1]=string1[1]-'0'+(string1[0]-'0')*10;
107
+
108
+
109
+ fscanf(fp2,"%s",string2);
110
+ i=0;
111
+ n=0;
112
+ while(string2[i++]!='0')
113
+ n++;
114
+ a=4-n;
115
+ if(a==0)
116
+ figure2[0]=0;
117
+ else if(a==1)
118
+ figure2[0]=string2[3]-'0';
119
+ else if(a==2)
120
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10;
121
+ else if(a==3)
122
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100;
123
+ else if(a==4)
124
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100+(string2[0]-'0')*1000;
125
+
126
+ fscanf(fp2,"%s",string2);
127
+ i=0;
128
+ n=0;
129
+ while(string2[i++]!='0')
130
+ n++;
131
+ if(n==0)
132
+ figure2[1]=0;
133
+ else if(n==1)
134
+ figure2[1]=string1[1]-'0';
135
+ else if(n==2)
136
+ figure2[1]=string1[1]-'0'+(string1[0]-'0')*10;
137
+
138
+
139
+ while((fscanf(fp1,"%s",string1[0])!=EOF)&&(fscanf(fp2,"%s",string2[0])!=EOF))
140
+ {
141
+ if(figure1[0]==figure2[0])
142
+ {
143
+ fprintf(fp3,"%s %d\n",figure1[0],figure1[1]+figure2[1]);
144
+
145
+
146
+ fscanf(fp1,"%s",string1);
147
+ i=0;
148
+ n=0;
149
+ while(string1[i++]=='0')
150
+ n++;
151
+ a=4-n;
152
+ if(a==0)
153
+ figure1[0]=0;
154
+ else if(a==1)
155
+ figure1[0]=string1[3]-'0';
156
+ else if(a==2)
157
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10;
158
+ else if(a==3)
159
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100;
160
+ else if(a==4)
161
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100+(string1[0]-'0')*1000;
162
+
163
+
164
+ fscanf(fp1,"%s",string1);
165
+ i=0;
166
+ n=0;
167
+ while(string1[i++]!='0')
168
+ n++;
169
+ if(n==0)
170
+ figure1[1]=0;
171
+ else if(n==1)
172
+ figure1[1]=string1[1]-'0';
173
+ else if(n==2)
174
+ figure1[1]=string1[1]-'0'+(string1[0]-'0')*10;
175
+
176
+
177
+ fscanf(fp2,"%s",string2);
178
+ i=0;
179
+ n=0;
180
+ while(string2[i++]!='0')
181
+ n++;
182
+ a=4-n;
183
+ if(a==0)
184
+ figure2[0]=0;
185
+ else if(a==1)
186
+ figure2[0]=string2[3]-'0';
187
+ else if(a==2)
188
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10;
189
+ else if(a==3)
190
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100;
191
+ else if(a==4)
192
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100+(string2[0]-'0')*1000;
193
+
194
+
195
+ fscanf(fp2,"%s",string2);
196
+ i=0;
197
+ n=0;
198
+ while(string2[i++]!='0')
199
+ n++;
200
+ if(n==0)
201
+ figure2[1]=0;
202
+ else if(n==1)
203
+ figure2[1]=string1[1]-'0';
204
+ else if(n==2)
205
+ figure2[1]=string1[1]-'0'+(string1[0]-'0')*10;
206
+ }
207
+
208
+
209
+ else if(figure1[0]<figure2[0])
210
+ {
211
+ fprintf(fp3,"%s %d\n",figure1[0],figure1[1]);
212
+
213
+
214
+ fscanf(fp1,"%s",string1);
215
+ i=0;
216
+ n=0;
217
+ while(string1[i++]=='0')
218
+ n++;
219
+ a=4-n;
220
+ if(a==0)
221
+ figure1[0]=0;
222
+ else if(a==1)
223
+ figure1[0]=string1[3]-'0';
224
+ else if(a==2)
225
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10;
226
+ else if(a==3)
227
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100;
228
+ else if(a==4)
229
+ figure1[0]=string1[3]-'0'+(string1[2]-'0')*10+(string1[1]-'0')*100+(string1[0]-'0')*1000;
230
+
231
+
232
+ fscanf(fp1,"%s",string1);
233
+ i=0;
234
+ n=0;
235
+ while(string1[i++]!='0')
236
+ n++;
237
+ if(n==0)
238
+ figure1[1]=0;
239
+ else if(n==1)
240
+ figure1[1]=string1[1]-'0';
241
+ else if(n==2)
242
+ figure1[1]=string1[1]-'0'+(string1[0]-'0')*10;
243
+ }
244
+
245
+
246
+ else if(figure1[0]>figure2[0])
247
+ {
248
+ fprintf(fp3,"%s &d\n",figure2[0],figure2[1]);
249
+
250
+
251
+ fscanf(fp2,"%s",string2);
252
+ i=0;
253
+ n=0;
254
+ while(string2[i++]!='0')
255
+ n++;
256
+ a=4-n;
257
+ if(a==0)
258
+ figure2[0]=0;
259
+ else if(a==1)
260
+ figure2[0]=string2[3]-'0';
261
+ else if(a==2)
262
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10;
263
+ else if(a==3)
264
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100;
265
+ else if(a==4)
266
+ figure2[0]=string2[3]-'0'+(string2[2]-'0')*10+(string2[1]-'0')*100+(string2[0]-'0')*1000;
267
+
268
+
269
+ fscanf(fp2,"%s",string2);
270
+ i=0;
271
+ n=0;
272
+ while(string2[i++]!='0')
273
+ n++;
274
+ if(n==0)
275
+ figure2[1]=0;
276
+ else if(n==1)
277
+ figure2[1]=string1[1]-'0';
278
+ else if(n==2)
279
+ figure2[1]=string1[1]-'0'+(string1[0]-'0')*10;
280
+ }
281
+ }
282
+
283
+
28
- fclose(fp);
284
+ fclose(fp1);
285
+ fclose(fp2);
286
+ fclose(fp3);
29
287
  }
30
- ```
288
+ ```
289
+
290
+ ### 発生している問題・エラーメッセージ
291
+
292
+ 上のプログラムをdata1.txtとdata2.txtについて実行してみたところ(コンパイルは通りました)、
293
+ 比較部分が繰り返されることなく終わってしまいました。
294
+ また読み込み状況を確認してみたところ、
295
+ string1=0001
296
+ a=1
297
+ figure1[0]=1
298
+ string1=19
299
+ n=5645
300
+ figure1[1]=1600061541
301
+ string2=0048
302
+ a=4
303
+ figure2[0]=48
304
+ string2=6
305
+ n=5661
306
+ figure2[1]=0
307
+ となっており、charで読み込んだ文字列を数字にした時の桁数が正しく読み込めていませんでした。
308
+
309
+ どのように変更すれば上手く実行できるでしょうか。
310
+
311
+ 大変長いプログラムで申し訳ないのですが、回答よろしくお願いします。