如何在C中检查特定的字符串格式

时间:2017-09-18 01:43:36

标签: c

我正在编写一个程序,其时间格式为“小时:分钟”,因此示例输入为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);

3 个答案:

答案 0 :(得分:2)

scanf() returns an error如果输入的格式不符合格式字符串(但请记住,它允许任何内容跟随输入(如“3:5HELLO”),将其留给下一个读取)。

对于null terminators,此代码中没有任何内容可以让您考虑它们。

答案 1 :(得分:2)

  

有没有办法专门检查以确保以该格式输入?

  1. 以字符串形式读取用户输入的

    char buf[100];
    if (fgets(buf, sizeof buf, stdin) == NULL) {
      Handle_EndOfFile_or_InputError();
    }
    
  2. 扫描字符串。寻找int : int。还扫描不应该存在的其他文本。 (sentinel

    char sentinel;
    if (sscanf(buf, "%d :%d %c", hour, minute, &sentinel) != 2) {
      Handle_InputIsNot2int();
    } 
    
  3. 检查范围

    #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();
    }
    
  4. 欢乐日快乐!根据需要使用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;。