我正在编写一个程序,其时间格式为“小时:分钟”,因此示例输入为1:56或0:12。
有没有办法专门检查以确保以该格式输入?还有什么是我可以使用的空终止符?我使用python所以C真让我困惑。谢谢!
#include <stdio.h>
int main()
{
int hour=0, minute=0, total=0;
while (hour != -1)
{
printf ("Enter dive times in the format of HH:MM (hours:minutes), Enter -1 to stop\n");
scanf("%d:%d",&hour, &minute);
if ((hour < -1) || (minute < 0))
{
printf("Invalid input");
}
else
{
printf ("total: %d hour: %d minute: %d", total, hour*60, minute);
total = total + (hour*60) + minute;
}
}
printf("The total is %d The hours is %d The minutes is %d\n",total, (total/60), (total%60) );
printf("The total divetime is %d:%d", total/60, total%60);
答案 0 :(得分:2)
scanf()
returns an error如果输入的格式不符合格式字符串(但请记住,它允许任何内容跟随输入(如“3:5HELLO”),将其留给下一个读取)。
对于null terminators,此代码中没有任何内容可以让您考虑它们。
答案 1 :(得分:2)
有没有办法专门检查以确保以该格式输入?
以字符串形式读取用户输入的行:
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) {
Handle_EndOfFile_or_InputError();
}
扫描字符串。寻找int
:
int
。还扫描不应该存在的其他文本。 (sentinel
)
char sentinel;
if (sscanf(buf, "%d :%d %c", hour, minute, &sentinel) != 2) {
Handle_InputIsNot2int();
}
检查范围
#define HOUR_MIN 0
#define HOUR_MAX 23
#define MINUTE_MIN 0
#define MINUTE_MAX 59
if (hour<HOUR_MIN || hour>HOUR_MAX || minute<MINUTE_MIN || minute>MINUTE_MAX) {
Handle_InputOutOfRange();
}
欢乐日快乐!根据需要使用hour,minute
,
total += (hour*60) + minute;
答案 2 :(得分:1)
此代码:
if ((hour < -1) || (minute < 0))
printf("Invalid input");
到:
if((hour < -1) || (hour > 12) || (minute < 0) || (minute > 60))
printf("Invalid input");
我认为null终止符意味着字符串必须在结尾处为NULL。
&#34;这是字符串 \ 0 &#34;。