首页 > 编程笔记

C语言sscanf():从数组中格式化读取数据

sscanf() 函数是 C语言标准库提供的函数,定义在<stdio.h>头文件中。

sscanf() 函数的工作方式与 scanf() 相似,但是它从字符数组中格式化读取数组,而不是从标准输入(通常是键盘)中读取数据。

sscanf() 函数的原型如下:
int sscanf(char *buffer,const char *format[,argument...]); 

参数

1、buffer

指向要从中读取数据的字符数组的指针。

2、format

由格式说明、空白字符与非空白字符构成。

1) 格式说明:指示了参数 argument 的输入格式,它由 % 开头,后面跟格式字符,格式字符前也可以有其他修饰符。格式说明的一般格式如下。
%[*][width][modifiers]格式字符
其中,格式字符及说明如下表所示。

格式字符 说明
c 单个字符
d 或 i 十迸制整数
e、E、f、g、G 浮点数
u 无符号十进制整数
o 无符号八进制整数
x 或 X 无符号十六进制整数
s 字符串
p 内存地址
[...] 匹配指定的字符,可以用连字符 - 表示某个范围内的字符,例如 %[a-z] 表示读取 abc...xyz 范围内的字符、%[0-9] 表示读取 012...789 范围内的字符等
[^...] 不匹配指定的字符,可以用连字符 - 表示某个范围内的字符,例如 %[^0-9] 表示匹配除十进制数字以外的所有字符,遇到十进制数字就停止读取。

格式字符前面的修饰符及说明如下表所示。

修饰符 说明
* 跳过读入的数据,不存入对应的参数 argument 中
width 指定输入数据所占用的宽度
modifiers 指定由 d、i、x、X、0、u、e、f、g 说明的字符的大小
h:短整型或无符号短整型
l:长整型或无符号长整型或双精度浮点型
L:长双精度类型

2) 空白字符:可以使 sscanf() 函数忽略输入的一个或多个空白字符。空白字符可以是空格、制表符或换行符。实际上,sscanf() 函数读入空白字符但是并不存储它们。

3) 非空白字符:sscanf() 函数读入并删除与该字符相同的字符。如果读入的字符与格式控制中的非空白字符不匹配,则停止读入。

3、argument

一个地址列表,表示要格式化的输入数据的地址,每个地址和格式说明一一对应。

返回值

如果调用成功,则函数返回读入数据的个数;如果没有读取任何数据,则返回 0;如果读取发生错误,返回 EOF。

实例

以下是一些 C语言 sscanf() 函数的使用示例:
#include <stdio.h>

int main() {
  char input[] = "25 5.67 Alice";
  int age;
  double weight;
  char name[10];

  sscanf(input, "%d %lf %s", &age, &weight, name);

  printf("Age: %d\n", age);       // 输出:Age: 25
  printf("Weight: %.2f\n", weight); // 输出:Weight: 5.67
  printf("Name: %s\n", name);     // 输出:Name: Alice

  return 0;
}
输出结果为:

Age: 25
Weight: 5.67
Name: Alice

总结

sscanf() 函数为 C 程序提供了一种从字符数组读取格式化输入的方法,它非常适合解析存储在字符数组中的结构化数据。通过不同的占位符和标志,可以灵活地处理各种类型和格式的输入。在某些复杂的情况下可能需要额外的错误处理和验证逻辑。

推荐阅读