C 教程

C 教程 C 语言简介 C 下载安装和环境配置 C 快速入门 C 语法 C 输出 C 注释 C 变量 C 数据类型 C 常量 C 运算符 C 布尔值 C If...Else 语句 C Switch 语句 C While 循环 C For 循环 C Break/Continue 语句 C 数组 C 字符串 C 用户输入 C 内存地址 C 指针

C 函数

C 函数 C 函数参数 C 作用域 C 函数声明 C 递归 C 数学函数

C 文件

C 创建文件 C 写入文件 C 读取文件

C 结构体

C 结构体 C 嵌套结构体 C 结构体和指针 C 联合体 C typedef

C 枚举

C 枚举

C 内存

C 内存管理

C 错误

C 错误 C 调试 C 空值 C 错误处理 C 输入验证

C 更多

C 日期 C 随机数 C 宏 C 代码组织 C 存储类 C 位运算符 C 固定宽度整数

C 项目

C 项目

C 参考资料

C 参考资料 C 关键词 C <stdio.h> C <stdlib.h> C <string.h> C <math.h> C <ctype.h> C <time.h>

C 标准库参考

C 标准库 - 参考手册 C 标准库 - <assert.h> C 标准库 - <ctype.h> C 标准库 - <errno.h> C 标准库 - <float.h> C 标准库 - <limits.h> C 标准库 - <locale.h> C 标准库 - <math.h> C 标准库 - <setjmp.h> C 标准库 - <signal.h> C 标准库 - <stdarg.h> C 标准库 - <stddef.h> C 标准库 - <stdio.h> C 标准库 - <stdlib.h> C 标准库 - <string.h> C 标准库 - <time.h>

C 实例

C 语言实例 C 经典100例 C 编译器 C 测验


C stdio fscanf() 函数

❮ C stdio 库


示例

从文件中读取字符串:

FILE *fptr;

fptr = fopen("filename.txt", "r");

char output[50];
fscanf(fptr, "%49s", output);
printf("%s", output);

fclose(fptr);

定义和用法

fscanf() 函数从文件中读取格式化数据,并将其写入参数指定的内存位置,然后将位置指示器移动到停止读取的文件位置。

fscanf() 函数定义在 <stdio.h> 头文件中。

format 参数是一个字符串,用于描述文件中预期数据的格式。如果文件内容与格式不匹配,则函数会在首次出现格式不匹配的地方停止读取。

格式说明符

格式字符串可以包含格式说明符,用于指定哪些数据部分应写入参数。每个格式说明符对应于函数的一个附加参数。

格式说明符的格式为%[*][width][length]格式说明符。方括号内的组成部分是可选的。

各组件说明:

  • * - 可选。如果存在,格式说明符不对应任何参数。
  • width - 可选。指定此说明符要读取的最大字符数。
  • length - 可选。用于更改参数数据类型的字符序列。它可以是以下值之一:
    • hh - 整数应为 char* 类型。
    • h - 整数应为 short* 类型。
    • l - 整数应为 long int* 类型。
             字符和字符串应为 wchar_t* 类型。
             浮点数应为 double* 类型。
    • ll - 整数类型为 long long int*。
    • j - 整数类型为 intmax_t* 或 uintmax_t*。
    • z - 整数类型为 size_t*。
    • t - 整数类型为 ptrdiff_t*。
    • L - 整数类型为 long double*。
  • specifier - 必填。用于指示文件数据应如何解释的字符或序列。下表列出了所有可能的说明符。

指定符列表

字符 说明符 描述
i or u 整数 读取一串数字并将其解释为整数。如果序列以"0x"开头,则预期为十六进制数字(0-9 和 A-F)。如果序列以"0"开头,则预期为八进制数字(0-7)。序列前面可以带有符号("+"或"-")。
d 十进制整数 读取一串数字(0-9)并将其解释为整数。该序列前面可以带有符号("+"或"-")。
o 八进制整数 读取一串数字(0-7)并将其解释为八进制整数。该序列前面可以带有符号("+"或"-")。
x 十六进制整数 读取一串数字(0-9 和 A-F)并将其解释为十六进制整数。它可以以"0x"开头。该序列前面可以带有符号("+"或"-")。
f, e, g or a 浮点数 读取有效的字符序列并将其解释为浮点数。有效的序列至少包含一个数字,前面可以有符号("+"或"-"),后面可以有小数点和小数位。也可以使用科学计数法(一个数字后跟"e"或"E"以及一些数字)。
c 字符 从文件中读取一个字符。如果指定了宽度,则读取指定数量的字符。
s 字符串 读取文件中直到下一个空白字符(空格、制表符、换行符)的所有字符。写入参数的值将附加一个空终止符 \0。
p 指针 读取表示指针地址的字符序列。
n 无输入(No input) 本程序不会从文件中读取任何内容。已读取的字符数将写入参数。该参数必须是指向整数的指针。
% 百分号 从文件中读取一个字符,该字符预期为"%"符号。此说明符不与任何参数关联。
[characters] 字符集 读取与 characters 中指定的字符匹配的单个字符。
[^characters] 排除的字符集 读取一个不在 characters 指定的字符集中的字符。

请参阅下方的更多示例,了解如何使用格式说明符。


语法

fscanf(FILE * fptr, const char * format, arg1, arg2...);

参数值

参数 描述
fptr 必需。文件指针,通常由 fopen() 函数创建。
format 必需。表示预期文件数据格式的字符串。
arg1, arg2... 可选。任意数量的附加参数,这些参数是指向可写入值的内存的指针。

技术细节

返回值: 一个表示写入参数数量的int值。如果发生错误,则返回常量EOF。

更多示例

示例

从包含序列"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 ", a);
printf("b = %d ", b);
printf("c = %d ", c);

fclose(fptr);

示例

从文件中读取一个十六进制数,并将其值转换为十进制输出:

FILE *fptr;
fptr = fopen("filename.txt", "r");

int num;
fscanf(fptr, "%x", &num);
printf("%d", num);

fclose(fptr);

示例

在文件的下一个字符中查找"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);

❮ C stdio 库