c - 如何检查用户输入是否是 C 中的 1 位或更多位?
问题描述
我想以小时和分钟(24 小时格式)输出第一次和第二次之间的差异。无效的时间输入,例如 25:10 或 18:80 应显示“时间格式错误”。单个数字输入应显示“时间间隔:无效”。我想要做的是在 if 条件下检查它,如果用户输入的是 2 位数字,即使时间是例如 01:03。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
int h1, h2, m1, m2;
int minuteSum, hours, minutes;
char c1;
bool validation = true;
printf("Enter start time: ");
scanf("%02d%c%02d", &h1, &c1, &m1);
if(h1 != "%02d" || m1 != "%02d")
{
validation = false;
}
printf("Enter end time: ");
scanf("%02d%c%02d", &h2, &c1, &m2);
if(h2 != "%02d" || m2 != "%02d")
{
validation = false;
}
if(h1 >= 0 && h1 < 24 && m1 < 60 && m1 >= 0 && h2 >= 0 && h2 < 24 && m2 < 60 && m2 >= 0 || h1 == 24 && m1 == 0 || h2 == 24 && m2 == 0 || validation == true)
{
h1 = h1 * 60 + m1;
h2 = h2 * 60 + m2;
if(h1 < h2)
{
minuteSum = h2 - h1;
}
else if(h2 < h1)
{
minuteSum = h1 - h2;
}
hours = minuteSum / 60;
minutes = minuteSum % 60;
printf("Time interval: %2d:%02d\n", hours, minutes);
}
else if(validation == true)
{
printf("Time format error.\n");
}
else if(validation == false)
{
printf("Time interval: NOT VALID");
}
return 0;
}
解决方案
请strptime()
用于解析日期和/或时间(或两者):
struct tm ltm = {0};
char buf1[] = "2011-02-31";
char buf2[] = "10:15";
strptime(buf1, "%Y-%m-%d", <m);
strptime(buf2, "%H:%M", <m);
推荐阅读
- c# - 嵌套属性上的 PagingList 排序
- javascript - AnyChart - 未显示旭日形图的图例(树数据)
- c# - Xamarin 表单 - 如何禁用 MasterDetailPage 菜单按钮
- laravel - Laravel simplePaginate() 用于分组数据
- ios - 如何正确设置 CABasicAnimation(开始)时间?
- apache-spark - 如何在火花流上对来自 kafka 的流数据进行 JOIN
- amazon-web-services - 在 AWS Connect 中从 Lambda 获取用户输入
- sublimetext3 - 我可以将文本选择传递给 Sublime 的构建系统的参数吗?
- vba - 在 VBA 中替换正则表达式 sith 上标
- javascript - 尝试清除所选单词或字符时,整个文本都会被清除