【急求】c语言 求两个时间的差值

输入如下所示的表示两个时刻的数据,输出两个时刻的时间差。(第2个时刻的时大于第1个时刻的)有空格。输入:12:30:5说明:表示第1个时刻12:30:0514:40:1输... 输入如下所示的表示两个时刻的数据,输出两个时刻的时间差。
(第2个时刻的时大于第1个时刻的)有空格。
输入:
12 : 30 : 5 说明:表示第1个时刻12:30:05
14 : 40 : 1
输出:
2:9:56 说明: 表示时间差为2小时9分56秒
展开
 我来答
ad饕饕不绝
推荐于2016-02-29 · TA获得超过596个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:0
展开全部

/*可以处理空格!!!*/

#include<stdio.h>

#include<string.h>

struct TTime

{

 int h,m,s;

 long GetSec(){return 3600L*h+60*m+s;}

 void StrToTime(char _str[])

 {

  int i,j,len=strlen(_str);

  /*去空格*/

  for(i=0;i<len;++i)

   if(_str[i]==' ')

   {

    for(j=i;j<len-1;++j)

     _str[j]=_str[j+1];

    --len;

    i=-1;

    continue;

   }

  /*读小时*/

  j=0;

  for(i=0;i<len;++i)

   if(_str[i]==':')

    break;

   else

    j=j*10 + _str[i]-'0';

  h = j;

  /*读分钟*/

  j=0;

  for(++i;i<len;++i)

   if(_str[i]==':')

    break;

   else

    j=j*10 + _str[i]-'0';

  m = j;

  /*读秒*/

  j=0;

  for(++i;i<len;++i)

   j=j*10 + _str[i]-'0';

  s = j;

 }

 void ToPlan(long t)

 {

  int hh,mm,ss;

  hh = t/3600;

  t%=3600;

  mm = t/60;

  t%=60;

  ss=t;

  printf("%2.2d:%2.2d:%2.2d\n",hh,mm,ss);

 }

}Ta,Tb,Tc;

void main()

{

 char a[105],b[105];

 gets(a);

 gets(b);

 Ta.StrToTime(a);

 Tb.StrToTime(b);

 printf("sec: %ld, time: ",Tb.GetSec()-Ta.GetSec());

 Tc.ToPlan(Tb.GetSec()-Ta.GetSec());

}

hqwfreefly
2009-12-25 · TA获得超过184个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
//一小时有3600秒
#define H_PER_SEC 3600
//一分钟有60秒
#define M_PER_SEC 60

typedef unsigned int time_type;

/*计算秒数*/
int cal_total_sec(const time_type h, const time_type m, const time_type s);
/*将相差秒数转化为hh:mm:ss格式结果保存在dh,dm,ds中*/
void trans_to_hms(const time_type d_sec, time_type *dh, time_type *dm, time_type *ds);
/*打印结果*/
void print_d_time(const time_type dh, const time_type dm, const time_type ds);

int main(void)
{
time_type h1, m1, s1;//第一个时刻h1:m1:s1
time_type h2, m2, s2;//第二个时刻h2:m2:s2
time_type total_sec1, total_sec2;//第一个时刻的秒数total_sec1,第二个时刻的秒数total_sec2
time_type d_sec;//两个时刻相差的秒数
time_type dh, dm, ds;//相差的时间dh:dm:ds

//读取两个时刻值
printf("输入时刻1[格式:hh : mm : ss]\n");
scanf("%d : %d : %d", &h1, &m1, &s1);
printf("输入时刻2[格式:hh : mm : ss]\n");
scanf("%d : %d : %d", &h2, &m2, &s2);

//计算两个时刻值的总秒数
total_sec1 = cal_total_sec(h1, m1, s1);
total_sec2 = cal_total_sec(h2, m2, s2);
//计算相差秒数
d_sec = total_sec2 - total_sec1;
//将相差秒数转化为dh:dm:ds格式
trans_to_hms(d_sec, &dh, &dm, &ds);
//打印转化结果
print_d_time(dh, dm, ds);
//等等用户输入任意字符
getch();
//结束程序
return 0;
}

/*计算秒数*/
int cal_total_sec(const time_type h, const time_type m, const time_type s)
{
return h * H_PER_SEC + m * M_PER_SEC + s;
}

/*将相差秒数转化为hh:mm:ss格式结果保存在dh,dm,ds中*/
void trans_to_hms(const time_type d_sec, time_type *dh, time_type *dm, time_type *ds)
{
*dh = d_sec / H_PER_SEC;
*dm = (d_sec - *dh * H_PER_SEC) / M_PER_SEC;
*ds = d_sec - *dh * H_PER_SEC - *dm * M_PER_SEC;
}

/*打印结果*/
void print_d_time(const time_type dh, const time_type dm, const time_type ds)
{
printf("--相差时间\n");
printf("%u:%u:%u\n", dh, dm, ds);

}
/*-----------------------------------------
请注意空格个数,必须遵循严格的输入个数
小时 : 分钟 : 秒数
在每个英文格式下的分号前有且仅有一个空格
------------------------------------------*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huifeng00
2009-12-25 · TA获得超过5233个赞
知道大有可为答主
回答量:808
采纳率:0%
帮助的人:698万
展开全部
http://zhidao.baidu.com/question/130460087.html
给你个地址,几乎原题。
其中也有我回答的。只不过没有空格,不过下面有个可以处理空格的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式