今天逛贴吧的时候看到有一道题,要求从键盘输入两个时间,时间为当天,格式是 24 小时制 hosr:minute,例如输入 00:50 23:10 , 然后输出它们时间差 22:20,而不是 1:40, 看上去好像挺简单的,就试了一下,左边的 hosr 为 24 进制,右边的 minute 为 60 进制,把 hour*60 在加上 minute 来比较大小相减,得到结果再除于 60,整数部分为 hour,余数为 minute,测试了一下发现如果在中文状态输入分号会导致后面取值错误,然后决定以字符串的形式获取输入,用 sscanf 对字符串分别取值,过滤掉分号
#include <stdio.h> | |
int main(int arch, char *argv[]) | |
{ | |
char buf[32]=""; | |
int hour1=0,minute1=0; | |
int hour2=0,minute2=0; | |
printf("请输入两个时间\n"); | |
fgets(buf,sizeof(buf),stdin); | |
sscanf(buf,"%d%*[^0-9]%d%*c%d%*[^0-9]%d",&hour1,&minute1,&hour2,&minute2); | |
int time1=hour1*60+minute1; | |
int time2=hour2*60+minute2; | |
if(time1>=time2) | |
{ | |
printf("%d:%d\n",(time1-time2)/60,(time1-time2)%60); | |
} | |
else if(time1<time2) | |
{ | |
printf("%d:%d\n",(time2-time1)/60,(time2-time1)%60); | |
} | |
return 0; | |
} |