首页 > 解决方案 > 如何检查用户输入是否是 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;
}

标签: c

解决方案


strptime()用于解析日期和/或时间(或两者):

struct tm ltm = {0};

char buf1[] = "2011-02-31";
char buf2[] = "10:15";

strptime(buf1, "%Y-%m-%d", &ltm);
strptime(buf2, "%H:%M", &ltm);

推荐阅读