C stdio fscanf() 函数
定义和用法
fscanf()
函数从文件中读取格式化数据,并将其写入由参数指定的内存位置,然后将位置指示器移动到停止读取的文件位置。
fscanf()
函数定义在 <stdio.h>
头文件中。
format 参数是一个字符串,描述了期望从文件中读取的数据格式。如果文件内容与格式不匹配,函数将在第一个不匹配点停止读取。
格式说明符
格式字符串可以包含格式说明符,这些说明符指定数据的哪些部分应写入参数。每个格式说明符对应于函数的一个附加参数。
格式说明符的形式为 %[*][width][length]specifier
。方括号 [
]
中的组件是可选的。
对每个组件的解释:
*
- 可选。当存在时,格式说明符不对应于一个参数。
width
- 可选。指定为此说明符读取的最大字符数。
length
- 可选。一系列字符,用于更改参数的数据类型。它可以是以下之一:
hh |
期望 char* 类型用于整数。 |
h |
期望 short* 类型用于整数。 |
l |
期望 期望 期望 |
ll |
期望 long long int* 类型用于整数。 |
j |
期望 intmax_t* 或 uintmax_t* 类型用于整数。 |
z |
期望 size_t* 类型用于整数。 |
t |
期望 ptrdiff_t* 类型用于整数。 |
L |
期望 long double* 类型用于浮点数。 |
specifier
- 必需。一个字符或序列,指示如何解释文件数据。可能的说明符列表如下表所示:
说明符列表
字符 | 说明符 | 描述 |
---|---|---|
i 或 u |
整数 |
读取一系列数字,并将其解释为整数。 如果序列以 " 如果序列以 " 序列前可能有符号(" |
d |
十进制整数 |
读取一系列数字(0-9),并将其解释为整数。 序列前可能有符号(" |
o |
八进制整数 |
读取一系列数字(0-7),并将其解释为八进制整数。 序列前可能有符号(" |
x |
十六进制整数 |
读取一系列数字(0-9 和 A-F),并将其解释为十六进制整数。 它可能以 " |
f , e , g 或 a |
浮点数 |
读取有效的字符序列,并将其解释为浮点数。 有效序列至少有一个数字,前面可能有符号(" 也可以使用科学计数法(一个数字后跟 " |
c |
字符 |
从文件中读取一个字符。 如果指定了宽度,则读取该数量的字符。 |
s |
字符串 |
读取文件中直到下一个空白字符(空格、制表符、换行符)的所有字符。 写入参数的值将附加一个额外的 |
p |
指针 | 读取表示指针地址的一系列字符。 |
n |
无输入 |
不从文件中读取任何内容。将到目前为止已读取的字符数写入参数。 参数必须是指向整数的指针。 |
% |
百分号 |
从文件中读取一个字符,期望是 " 此说明符不与参数关联。 |
[characters] |
字符集 | 读取与 characters 中指定的字符之一匹配的字符。 |
[^characters] |
排除的字符集 | 读取不在 characters 中指定的字符集中的字符。 |
实例
例子 1
从文件中读取字符串:
FILE *fptr; fptr = fopen("filename.txt", "r"); char output[50]; fscanf(fptr, "%49s", output); printf("%s", output); fclose(fptr);
例子 2
从包含序列 "1 + 2 = 3" 的文件中提取数字:
FILE *fptr; fptr = fopen("filename.txt", "r"); int a, b, c; fscanf(fptr, "%i + %i = %i", &a, &b, &c); printf("a = %d \n", a); printf("b = %d \n", b); printf("c = %d \n", c); fclose(fptr);
例子 3
从文件中读取一个十六进制数,并以十进制输出其值:
FILE *fptr; fptr = fopen("filename.txt", "r"); int num; fscanf(fptr, "%x", &num); printf("%d", num); fclose(fptr);
例子 4
文件的下一个字符中搜索 "x"、"y" 或 "z":
FILE *fptr; fptr = fopen("filename.txt", "r"); char c; int found = fscanf(fptr, " %[xyz]", &c); if (found > 0) { printf("Found %c", c); } else { printf("Character not found"); } fclose(fptr);
语法
fscanf(FILE * fptr, const char * format, arg1, arg2...);
参数
参数 | 描述 |
---|---|
fptr | 必需。文件指针,通常由 fopen() 函数创建。 |
format | 必需。表示期望从文件中读取的数据格式的字符串。 |
arg1, arg2... | 可选。任意数量的附加参数,这些参数是指向可以写入值的内存的指针。 |
技术细节
返回: |
返回 如果发生错误,返回常量 |
---|