C语言 <stdio.h> sscanf() 函数

  • 描述

    C库函数int sscanf(const char *str, const char *format, ...)从字符串读取格式化的输入。
  • 声明

    以下是sscanf()函数的声明。
    
    int sscanf(const char *str, const char *format, ...)
    
    参数
    • str - 这是C字符串,函数将其用作检索数据的源。
    • format - 这是C字符串,包含以下一项或多项:- 空白字符,非空白字符和格式说明符。格式说明符将为[=%[*][width][modifiers]type=],下面将对此进行说明-
    • 参数 说明
      * 这是一个可选的开始星号,指示要从流中读取数据但将其忽略,即,该数据未存储在相应的参数中。
      width 这指定了当前读取操作中要读取的最大字符数。
      modifiers 为由指针指向的数据指定一个与int(对于d,i和n而言),unsigned int(对于o,u和x而言)或float(对于e,f和g而言)不同的大小。 相应的附加参数:h:short int(对于d,i和n),或者unsigned short int(对于o,u和x)l:long int(对于d,i和n),或者unsigned long int(对于o, u和x)或double(对于e,f和g)L:long double(对于e,f和g)
      type 一个字符,指定要读取的数据类型以及预期如何读取。 请参阅下表。
      type 合法输入 数据类型
      c 单个字符:读取下一个字符。 如果指定的宽度不同于1,则该函数读取宽度字符并将其存储在作为参数传递的数组的连续位置中。 在末尾没有空字符。 char *
      d 十进制整数:数字(可选)后跟+或-号 int *
      e, E, f, g, G 浮点数:包含小数点的十进制数,可以选择在其前面加上+或-号,并可以选择在其后跟随e或E字符以及一个十进制数字。 有效条目的两个示例是-732.103和7.12e4 float *
      o 八进制整数: int *
      s 字符串。 这将读取后续字符,直到找到空白为止(空白字符被视为空白,换行符和制表符)。 char *
      u 无符号十进制整数。 unsigned int *
      x, X 十六进制整数 int *
    • 其他参数 -该函数期望将一系列指针作为附加参数,每个参数均以相同的顺序指向格式字符串中由其对应的%-tag指定的类型的对象。对于检索数据的格式字符串中的每个格式说明符,应指定一个附加参数。如果要在常规变量上存储sscanf操作的结果,则应在其标识符之前加上引用运算符,即“&”号(&),例如:int n; sscanf(str,“%d”,&n);
  • 返回值

    成功后,函数将返回填充的变量数。如果在输入数据失败之前无法成功读取任何数据,则返回EOF。
    示例
    以下示例显示sscanf()函数的用法-
    
    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>
    
    int main () {
       int day, year;
       char weekday[20], month[20], dtm[100];
    
       strcpy( dtm, "Saturday March 25 1989" );
       sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );
    
       printf("%s %d, %d = %s\n", month, day, year, weekday );
        
       return(0);
    }
    
    尝试一下
    让我们编译并运行上面的程序,它将在交互模式下产生以下结果-
    
    May 22, 2020 = Friday