这是一道看似很简单的有关C语言的时间差问题,其实需要考虑的东西还蛮多的!!!
举个栗子,思考一下
如果单纯地小时与小时相减,分钟与分钟相减;
2点20-1点10分=1小时10分钟
3点10分-2点50分=1小时负40分钟(这就不是我们想要的正确答案了)
解决方案:
我们可以将两个时间(几时几分)换算成分钟,然后再将分钟换算成几小时几分钟。代码如下:
#include<stdio.h>
#include<math.h>
int main(){
int hour1,minute1;
int hour2,minute2;
int final_hour,final_minute;
printf("请输入第一个时间:");
scanf("%d %d",&hour1,&minute1);
printf("请输入第二个时间:");
scanf("%d %d",&hour2,&minute2);
final_hour=abs((hour2*60+minute2)-(hour1*60+minute1))/60;//小时部分
final_minute=abs((hour2*60+minute2)-(hour1*60+minute1))%60;//分钟部分
if(final_hour==0){
printf("%d点%d分与%d点%d分的时间差为%d分钟:",hour1,minute1,hour2,minute2,final_minute);
}else{
printf("%d点%d分与%d点%d分的时间差为%d小时%d分钟:",hour1,minute1,hour2,minute2,final_hour,final_minute);
}
return 0;
}
最后的判断语句
if(final_hour==0){
printf("%d点%d分与%d点%d分的时间差为%d分钟:",hour1,minute1,hour2,minute2,final_minute);
}else{
printf("%d点%d分与%d点%d分的时间差为%d小时%d分钟:",hour1,minute1,hour2,minute2,final_hour,final_minute);
}
这部分是为了避免出现0小时几分钟这种情况。
最后
分享我从别人那里学到的小干货,C语言中的取绝对值函数:
- int型使用abs();
- long型使用labs();
- float,double型使用fabs();