前提・実現したいこと
ファイルから以下のデータを読み込み、ABCの種別ごとの貸出合計時間を算出し、指定したアルファベットの貸出合計時間を表示させたいです。
O→貸出時刻
I→返却時刻
データファイル
A O 09:00
B O 09:05
B I 09:30
C O 09:31
B O 09:45
A I 10:03
A O 10:20
B I 10:38
C I 10:55
A I 11:10
発生している問題・エラーメッセージ
標準入力から読み込んだアルファベット名の貸出時間合計だけを出力したいのですが、
BやCと標準入力に入れて実行しても、以下のようにABCそれぞれの合計時間と、
ABC全ての貸出総合計時間が表示されてしまいます。
A 1:53↵
B 1:18↵
C 1:24↵
4:35↵
標準入力で指定したアルファベットのみの合計時間を表示させるにはどうすればいいのでしょうか。
printfの部分を変えることを考えたのですが、答えが見つかりません。
printf("%d:%02d\n", tm/60, tm%60);
該当のソースコード
#include <stdio.h> #define LINESIZE 256 int main(int argc, char* argv[]){ FILE *fp; char line[LINESIZE]; char b, io; int h, m, tm; if ((fp= fopen(argv[1], "r")) == NULL) { printf("Can't open the file.\n"); return 1; } tm = 0; int tms[] = {0, 0, 0}; for(; fgets(line, LINESIZE, fp)!=NULL;){ sscanf(line, "%c %c %d:%d", &b, &io, &h, &m); switch(io){ case 'I': tm += 60*h+m; tms[b - 'A'] += 60*h+m; break; case 'O': tm -= 60*h+m; tms[b - 'A'] -= 60*h+m; break; } } for (int i = 0; i < 3; i++) { if (tms[i] != 0) { printf("%c %d:%02d\n", 'A' + i, tms[i]/60, tms[i]%60); } } printf("%d:%02d\n", tm/60, tm%60); fclose(fp); return 0; }