質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

858閲覧

指定したアルファベットの合計時間を表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/01/09 14:34

前提・実現したいこと

ファイルから以下のデータを読み込み、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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2022/01/09 14:40

> 標準入力から読み込んだアルファベット名の貸出時間合計だけを出力したいのですが、 標準入力から読む部分がないので、コピペミスと思われます。
jimbe

2022/01/09 18:01

この課題のタグを作ってもらって、過去の質問全てに付けた方が良いように思えてきました ^^;
thkana

2022/01/09 23:53

「アルファベットの合計時間」って日本語として意味不明...と思いましたがボート問題なんですね。 ボート貸し出しと素直に書くと検索に引っかかってカンニングがばれるから、とか?
dodox86

2022/01/10 00:33 編集

teratailのトップページで「ボート貸し出し」で検索 検索結果: 5件 「知恵袋 プログラミング ボート貸し出し」でGoogle検索 約 57,100 件 ...どちらの学校でしょうか。
episteme

2022/01/10 08:28

ここまでできてるなら、tms[0~2]のドレ使うかを標準入力に応じて決めるだけ。惜しいねー...
guest

回答1

0

言語のコードを組むなら、デバッグ環境を揃えましょう
コードの任意の場所で実行を止めて、変数のナカミを見ることができます
また、1行づつ実行させて、動作を確認できます

Windowsなら、VisualStudio入れてみませんか

そうやって、各変数を見ていって、おかしな値が入ってないかを確認していきましょう。

投稿2022/01/09 23:12

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問