今天逛贴吧的时候看到有一道题,要求从键盘输入两个时间,时间为当天,格式是 24 小时制 hosr:minute,例如输入 00:50 23:10 , 然后输出它们时间差 22:20,而不是 1:40, 看上去好像挺简单的,就试了一下,左边的 hosr 为 24 进制,右边的 minute 为 60 进制,把 hour*60 在加上 minute 来比较大小相减,得到结果再除于 60,整数部分为 hour,余数为 minute,测试了一下发现如果在中文状态输入分号会导致后面取值错误,然后决定以字符串的形式获取输入,用 sscanf 对字符串分别取值,过滤掉分号

c
#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;
}

运行结果