以前ボートの貸し出し状況を集計するプログラムを作成した。その日に貸し出した全ボートの貸出時間の総計を算出し、その結果を出力するプログラムである。
このプログラムに貸出のあった各ボートごとの貸出時間の総計も加えたい。
ボート屋はボートを5隻所有しているとし,各ボート名は大文字アルファベット1文字で「A」,「B」,「C」,「D」,「E」であるとする。
また、「O」:貸出、「I」:返却である。
データファイルの例として
A O 09:10
C O 09:25
A I 09:50
C I 10:05
D O 10:15
D I 10:55
A O 11:30
C O 12:00
A I 12:45
C I 13:15
D O 13:20
A O 13:30
D I 14:05
A I 14:15
D O 14:55
D I 15:40
の場合、
A 2:30
B 2:30
C 4:10
D 2:50
E 2:20
14:20
と出力したい。
下記プログラムは以前のプログラムに
//各ボートの総計時間を表示
printf( "%c %d:%02d\n",b, tm / 60, tm % 60 );
を追加しており、
この現状のプログラムでは
A 14:20
14:20
と出力されてしまう。
解決方法を教えてください。
C言語
1#include <stdio.h> 2#include <stdlib.h> 3#define LINESIZE (256) 4 5int main( int argc, char* argv[] ) 6 7{ 8 FILE* fp = NULL; 9 char line[LINESIZE]; 10 char b, io; 11 int h, m, tm; 12 13 14// ファイルオープン 15 if ( (fp= fopen ( argv[1], "r" ) ) == NULL ) { 16 17 printf( "Can't open the file.\n" ); 18 19 return 1; 20 } 21 22// ファイルからデータを読み込み 23 tm = 0; 24 25 while ( fgets( line, LINESIZE, fp ) != NULL ) { 26 27 sscanf(line, "%c %c %d:%d", &b, &io, &h, &m); 28 29// ボートの貸出時間を計算する 30 31 switch ( io ) { 32 33 case 'I': tm += 60 * h + m; break; 34 35 case 'O': tm -= 60 * h + m; break; 36 37 default: break; 38 } 39 } 40 41 fclose( fp ); 42 43//各ボートの総計時間を表示 44 printf( "%c %d:%02d\n",b, tm / 60, tm % 60 ); 45 46// 貸出時間の総計を表示 47 printf( "%d:%02d\n", tm / 60, tm % 60 ); 48 49 return 0; 50 51}
こちらの質問が複数のユーザーから「過去の低評価」という指摘を受けました。
