m0_69837572 2022-07-21 17:49 采纳率: 33.3%
浏览 240
已结题

C语言结构体计算时间差问题

编写函数BeforTime(time,duration)计算时间time之前“xx小时xx分xx秒”的时间。时间以24小时制格式表示。
BeforTime函数的返回值为计算结果与初始时间之间的日期差。如果是同一天返回0,是前n天则返回n。
用结构体类型存储时间。
提示:先计算秒,再计算分,最后计算小时。例如计算“09:19:52”前“1:20:30”的方法是:
秒:52−30=22,借0
分:19−20−0+60=59,借1
时:9−1−1=7,借0
测试输入1:
09:19:52
1:15:30
输出:
同一天08:04:22
测试输入2:
00:19:52
1:20:30
输出:
前1天22:59:22
测试输入3:
00:19:52
25:30:59
输出:
前2天22:48:53

问题相关代码,请勿粘贴截图

#include <stdio.h>
struct CLOCK
{
int hour;
int minute;
int second;
};
int BeforeTime(struct CLOCK *time,struct CLOCK duration);

int main()
{
struct CLOCK timeNow,timePast;
int n;
scanf("%d:%d:%d",&timeNow.hour,&timeNow.minute,&timeNow.second);
scanf("%d:%d:%d",&timePast.hour,&timePast.minute,&timePast.second);
n = BeforeTime(&timeNow,timePast);
if(n == 0)
printf("同一天");
else
printf("前%d天",n);
printf("%02d:%02d:%02d",timeNow.hour,timeNow.minute,timeNow.second);
return 0;
}
//此函数计算time时刻前duration的时间;
//函数的返回值:计算结果与time相比是同一天,应返回0,是前n天,则返回n
int BeforeTime(struct CLOCK *time,struct CLOCK duration)
{
int sum=0,flag=0;
if(time->second<duration.second)
{
--time->minute;
time->second+=60;
}

time->second=time->second-duration.second;
if(time->minute<duration.minute){
    --time->hour;
    time->minute += 60;
    if(time->hour<duration.hour)
    {time->hour+=24;flag=1;}
}

time->minute= time->minute -duration.minute;

time->hour = time->hour - duration.hour;
sum=((time->second+time->minute60+time->hour3600)-(duration.second+duration.minute60+duration.hour3600))/3600;
if(sum<=24)
return 0+flag;
else return sum/24+flag;
}

运行结果及报错内容

第三个测试过不了

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • AlexanderKong 2022-07-21 19:23
    关注

    int BeforeTime(struct CLOCK* time, struct CLOCK duration)
    {
    int sum = 0, flag = 0;

    if (duration.hour >= 24)
        sum = duration.hour / 24;
    duration.hour = duration.hour % 24;
    
    if (time->second < duration.second)
    {
        --time->minute;
        time->second += 60;
    }
    
    time->second = time->second - duration.second;
    if (time->minute < duration.minute) {
        --time->hour;
        time->minute += 60;
    
    }
    time->minute = time->minute - duration.minute;
    
    if (time->hour < duration.hour)
    {
        time->hour += 24; 
        flag = 1;
    }
    time->hour = time->hour - duration.hour;
    return flag + sum;
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月31日
  • 已采纳回答 7月23日
  • 创建了问题 7月21日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效