【发布时间】:2013-07-18 12:54:42
【问题描述】:
在接受表单用户的输入后,我必须找出输入的小时数和分钟数:
( Number1 : Number2 )
例如:(12:21)
我应该报告 12 小时 21 分钟,然后再次等待输入。如果给定格式不匹配,我应该将其报告为无效输入。我写了这段代码:
#include<stdio.h>
int main()
{
int hourInput=0,minutesInput=0;
char *buffer = NULL;
size_t size;
do
{
puts("\nEnter current time : ");
getline ( &buffer, &size, stdin );
if ( 2 == sscanf( buffer, "%d:%d", &hourInput, &minutesInput ) && hourInput >= 0 && hourInput <= 24 && minutesInput >=0 && minutesInput <= 60 )
{
printf("Time is : %d Hours %d Minutes", hourInput, minutesInput );
}
else
{
puts("\nInvalid Input");
}
}
while ( buffer!=NULL && buffer[0] != '\n' );
return 0;
}
问。如果有人在数字和: 之间给出了空格,我的程序将其视为无效输入,而我应将其视为有效。
有人可以解释为什么会发生这种情况以及摆脱这个问题的任何想法吗?据我了解, sscanf 应该忽略所有空格?
【问题讨论】:
-
顺便说一句:您在 hourInput 中接受“24”,这对于“24:00”很有用。您也接受分钟“60”。推荐“minutesInput
-
@chux 感谢您指出这一点。不过,我在此处发布后已对其进行了更正。
-
您是否愿意接受 24:00(最好参见 ISO 8601)但不接受 24:01,您可以使用
... && hourInput >= 0 && minutesInput >=0 && minutesInput < 60 && ((hourInput*60 + minutesInput) <= 24*60)
标签: c scanf formatted-input