格式化串要写对, 就 %d h,%d m
【以下回答由 GPT 生成】
问题所在是在用户输入时间时,没有对用户输入的合法性进行校验,也没有处理用户输入错误导致的程序异常。
解决方案如下:
下面是修改后的代码:
#include<stdio.h>
#include<stdlib.h> // 添加头文件以使用exit()函数
int main() {
int hour1, minute1;
int hour2, minute2;
printf("请输入第一个时间(hh:mm): ");
scanf_s("%d:%d", &hour1, &minute1);
// 对第一个时间的合法性进行校验
while (hour1 < 0 || hour1 > 23 || minute1 < 0 || minute1 > 59) {
printf("输入的时间不合法,请重新输入第一个时间(hh:mm): ");
scanf_s("%d:%d", &hour1, &minute1);
}
printf("请输入第二个时间(hh:mm): ");
scanf_s("%d:%d", &hour2, &minute2);
// 对第二个时间的合法性进行校验
while (hour2 < 0 || hour2 > 23 || minute2 < 0 || minute2 > 59) {
printf("输入的时间不合法,请重新输入第二个时间(hh:mm): ");
scanf_s("%d:%d", &hour2, &minute2);
}
int t1 = hour1 * 60 + minute1;
int t2 = hour2 * 60 + minute2;
int t = t2 - t1;
printf("时间差为: %d小时 %d分钟\n", t / 60, t % 60);
return 0;
}
通过上述修改,用户输入的时间不会出现非法情况,并且程序会持续要求用户重新输入,直到输入合法为止。这样可以避免出现无法获得期望结果的问题。
【相关推荐】