以下プログラムです。
#include <stdio.h>
struct str_time{
int hour; /* 時 */
int min; /* 分 */
int sec; /* 秒 */
};
/*
名称 count_times
引数 struct str_time *sta_time:開始 時分秒
struct str_time *end_time:終了 時分秒
struct str_time *dif_time:時差 時分秒
戻り値 無し
*/
/*----- ここより下に解答を記述してください -----*/
void count_times(struct str_time *sta_time, struct str_time *end_time, struct str_time *dif_time)
{
int total;
int total_sta;
int total_end;
total_sta = sta_time->hour * 3600 + sta_time->min * 60 + sta_time->sec;
total_end = end_time->hour * 3600 + end_time->min * 60 + end_time->sec;
total = total_end - total_sta;
dif_time->hour = total / 3600;
dif_time->min = (total % 3600) / 60;
dif_time->sec = (total % 3600) % 60;
return;
}
/*----- ここより上に解答を記述してください -----*/
int main(void)
{
struct str_time sta_time; /*開始 時分秒*/
struct str_time end_time; /*終了 時分秒*/
struct str_time dif_time; /*時差 時分秒*/
printf("二つの時刻(開始時刻と終了時刻)を入力して下さい\n");
printf("開始 時分秒([時] [分] [秒]):");
scanf("%d %d %d", &sta_time.hour, &sta_time.min, &sta_time.sec);
printf("終了 時分秒([時] [分] [秒]):");
scanf("%d %d %d",&end_time.hour, &end_time.min, &end_time.sec);
/*----- ここより下に解答を記述してください -----*/
count_times(&sta_time, &end_time, &dif_time);
/*----- ここより上に解答を記述してください -----*/
puts("----- 処理後 -----");
printf("時差は %d 時間 %d 分 %d 秒です。\n", dif_time.hour, dif_time.min, dif_time.sec);
return 0;
}
表示例1
開始:1時2分3秒 終了:4時5分6秒 時差:3時間3分3秒
表示例2
開始:10時11分12秒 終了:13時14分15秒 時差:3時間3分3秒
表示例3
開始:23時24分25秒 終了:2時27分28秒 時差:3時間3分3秒
関数内で受け取った値を「秒」に統一させ、差を求めてからそれぞれ時、分、秒に戻すという考えです。
表示例1と2は上手くいったのですが表示例3のほうで時差 マイナス20時間マイナス50分~ と
表示されてしまいます。うまく説明できないのですが、表示例3のような日をまたいだ場合でもきちんと
表示させる方法が分からないので、どなたかご教授お願いします。