アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボート屋の集計
下記のボート屋からの依頼事項に従って,毎日のボートの貸出状況を集計するプログラムを作成してください.
【依頼事項】
•ボートは5隻所有している(A,B,C,D,E)
•営業時間は09:00~18:00である
•ボートの貸出・返却時に,以下を記録している
ボート名,貸出/返却,時刻(10分単位)
これらの情報から,1日分の記録として,その日の貸出時間の総計を算出したい.
コマンドラインにboat.txtと入力すると、6:45 と出力される。

このプログラムを参考に次のように各ボート個別の貸出時間、総貸出時間を出力するプログラムを作成したい。
お教えいただきたくお願いします。
出力
A 2:40
C 1:55
D 2:10
6:45

1日分の記録の内容
boat.txt
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


#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;
for(; fgets(line, LINESIZE, fp)!=NULL;){
// ボートの貸出/返却時間の処理
sscanf(line, "%c %c %d:%d", &b, &io, &h, &m);
switch(io){
case 'I':
tm += 60*h+m;
break;
case 'O':
tm -= 60*h+m;
break;
}
}

printf("%d:%02d\n", tm/60, tm%60);

fclose(fp);

return 0;
}

A 回答 (2件)

#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, 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 < 5; 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;
}
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2021/07/14 19:45

具体的には何に困っている?



その「1日分の記録の内容」の各行はどのようなフォーマットになっていてどのような意味を持っている?

そもそも「依頼内容」と「1日分の記録の内容」が矛盾しているってことに気付いてる?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!