gpt4 book ai didi

c - C语言中如何判断用户输入的数字是否为1位或以上?

转载 作者:行者123 更新时间:2023-11-30 16:13:00 24 4
gpt4 key购买 nike

我想以小时和分钟(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;
}

最佳答案

scanf() 对于这种输入检查来说是一个糟糕的选择,实际上,由于其有限的检查能力,它在几乎所有地方都是一个糟糕的选择。

strptime 并非在所有系统上都可用。

您可以在示例中使用:

  • fgets() 读取用户的输入。
  • strtok() 将读取的输入分隔到字段中。
  • sscanf() 将每个分隔的字符串解释为整数;或atoi()

有关来源的一些注释:

  • 将编译器的警告级别提高到最高。阅读所有警告并消除其原因。
  • 如果不使用参数,请使用int main(void)。省略 void 是 C 语言中非常古老的风格,并且仅在 C++ 等中正确。在 C 中,这意味着“我不关心参数的数量,不检查调用代码。”
  • printf() 返回一个值。如果您不想使用它,请通过 (void)printf(...);
  • 显示
  • scanf() 返回已转换字段的数量。您可以将其用作输入正确性的第一个指标。
  • h1 将收到转换后的小时数,供您稍后使用。您无法将其与格式字符串进行比较。
  • 不要编写validation == true,因为它是多余的。将此类变量命名为 isValid ,源代码将更具可读性。 validation == false 变为 !isValid.

关于c - C语言中如何判断用户输入的数字是否为1位或以上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com