本人向同学借鉴了一个有关于时差换算的代码,如下:

#include <stdio.h>
int main()
{
int hour1,minute1;
int hour2,minute2;
printf("请输入你想要进行换算的两个时间:n");
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
int t1=hour1*60+minute1;
int t2=hour2*60+minute2;
int t=t2-t1;
printf("你所输入的两地的时差是%d小时%d分钟",t/60,t%60);
return 0;
}

该段代码可以进行两个时间的时差换算,运行结果如下:

但如通过多组数据的试验,发现有一个小bug,当输入的第一个数据时间晚于第二个数据的时候,就会出现输出时差为负数的情况发生,如图:

因为在我们的日常生活中,时间差只是两个时间的差值,所以是一个标量而并不是向量,所以不应该有负数的发生。

这种情况是我们不想遇到的,所以我们应该加入一个判断语句,对所输入的数据进行判断,以此来避免该情况的发生。

所以我加入了两端判断语句,如图:

if(hour2>hour1){

ih=hour2-hour1;
im=minute2-minute1;
if(im<-0){
im=60+im;
ih --;

}
}

 

if(hour2<hour1){
ih=hour2-hour1;
im=minute1-minute2;
if(ih<-0){
ih ++;
im=60+im;
}
}

这两段代码,对所输入的时间的数字进行了比较,以保证让所输出的时间差为正数。

所以优化后的代码如下图:

#include <stdio.h>
int main()
{
int hour1,minute1;
int hour2,minute2;
int im,ih;
printf("请输入你想要进行换算的两个时间:n");
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
if(hour2>hour1){

ih=hour2-hour1;
im=minute2-minute1;
if(im<-0){
im=60+im;
ih --;

}
}
if(hour2<hour1){
ih=hour2-hour1;
im=minute1-minute2;
if(ih<-0){
ih ++;
im=60+im;


}

}
printf("您说输入的时差为%d时%d分。n",ih,im);
return 0;
}

这样我们就可以避免上述情况的发生。

测试情况如下:

这样我们就可以避免上述情况的发生,无论所输入的两个数据具备怎样的关系,都可以正确的输出所需要的答案。

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/Iskia-/p/14491626.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程

3087 99元 198元 5折
3676 9.31元 9.8元 9.5折