跳到主要内容

C++ sscanf() 函数

sscanf() 函数原型

int sscanf( const char* buffer, const char* format, ... );

sscanf() 函数从缓冲区 buffer 中读取数据,并将值存储到相应的变量中。

它定义在 <cstdio> 头文件中。

sscanf() 参数

  • buffer:指向以空字符结尾的字符字符串,用于读取数据。
  • format:指向以空字符结尾的字符字符串,指定如何读取输入。它包含以 % 开始的格式说明符。

格式字符串包含以下部分:

  • 非空白字符(除 % 外),每个字符都消耗输入流中的一个相同字符。如果流中的下一个字符不相等,则可能导致函数失败。
  • 空白字符:所有连续的空白字符都被视为单个空白字符。此外,'\n'、'\t' 和 ' ' 被视为相同。
  • 转换说明:遵循以下格式:
    • 指定开始的初始 % 字符
    • 一个可选的 *,称为赋值抑制字符。如果此字符存在,fscanf() 不会将结果分配给任何接收参数。
    • 一个可选的正整数,指定最大字段宽度。它指定 fscanf() 在进行当前转换说明指定的转换时允许消耗的最大字符数。
    • 一个可选的长度修饰符,指定接收参数的大小。
    • 一个转换格式说明符。
格式说明符描述
%匹配字面量 %
c匹配单个字符或多个字符。如果定义了宽度,则匹配恰好 width 个字符。
s匹配连续的非空白字符。如果定义了宽度,则匹配恰好 width 个字符或直到找到第一个空白字符为止。
[set]匹配给定字符集中的非空字符序列。如果 set 开头有 ^,则匹配 set 中没有的所有字符。
d匹配十进制整数。
i匹配整数。
o匹配无符号八进制整数。
X 或 x匹配无符号十六进制整数。
u匹配无符号十进制整数。
A 或 a, E 或 e, F 或 f, G 或 g匹配浮点数。
n返回到目前为止读取的字符数。
p匹配一个实现定义的字符序列,定义了一个指针。

因此,格式说明符的一般格式为:%[*][width][length]specifier

: 其他附加参数用于接收数据。它们按照格式说明符的顺序出现。

sscanf() 返回值

  • 如果成功,sscanf() 函数返回成功分配的接收参数数量。
  • 如果在分配第一个接收参数之前发生匹配失败,则返回零。
  • 如果在分配第一个接收参数之前发生输入失败,返回 EOF。

示例:sscanf() 函数的工作原理

#include <cstdio>

int main ()
{
char fname[50], lname[50];
char buffer[] = "Dennis Ritchie";

sscanf(buffer, "%s %s", fname, lname);
printf("First name : %s \nLast name : %s\n", fname, lname);

return 0;
}

当你运行程序时,可能的输出将是:

First name : Dennis
Last name : Ritchie