C++ sscanf()

sscanf() 声明

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

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

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

sscanf() 参数

  • buffer:一个指向以 null 结尾的字符串的指针,用于从中读取数据。
  • format:一个指向以 null 结尾的字符串的指针,用于指定如何读取输入。它包含以 % 开头的格式说明符。

    格式字符串包含以下部分

    • 非空白字符:除了 % 之外,每个非空白字符都会消耗输入流中的一个相同字符。如果流中的下一个字符不匹配,则可能导致函数失败。
    • 空白字符:所有连续的空白字符都被视为一个空白字符。此外,'\n'、'\t' 和 ' ' 被视为相同。
    • 转换说明符:它遵循以下格式
      • 开头的 % 字符,用于指定开始。
      • 一个可选的 *,称为赋值抑制字符。如果存在此字符,则 fscanf() 不会将结果分配给任何接收参数。
      • 一个可选的正整数,用于指定最大字段宽度。它指定了 fscanf() 在执行当前转换说明符指定的转换时可以消耗的最大字符数。
      • 一个可选的长度修饰符,用于指定接收参数的大小。
      • 一个转换格式说明符。
        格式说明符 描述
        % 匹配字面量 %
        c 匹配单个字符或多个字符。如果定义了宽度,则匹配确切的宽度字符。
        s 匹配连续的非空白字符。如果定义了宽度,则匹配确切的宽度字符,或直到找到第一个空白字符。
        [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

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战