菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

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 参数是一个字符串,它描述了从文件中期望的数据格式。如果文件内容与格式不匹配,则函数将在第一个不匹配发生时停止读取。

格式说明符

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

格式说明符的形式为 %[*][width][length]specifier。方括号中的组件是可选的。

每个组件的解释

  • * - 可选。当存在时,格式说明符不对应于参数。
  • 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 - 必需。一个字符或字符串,指示如何解释文件数据。可能的说明符列表如下表所示。

说明符列表

字符 说明符 描述
iu 整数 读取一系列数字并将其解释为整数。如果序列以“0x”开头,则期望十六进制数字(0-9 和 A-F)。如果序列以“0”开头,则期望八进制数字(0-7)。序列可能以符号(“+”或“-”)开头。
d 十进制整数 读取一系列数字(0-9)并将其解释为整数。序列可能以符号(“+”或“-”)开头。
o 八进制整数 读取一系列数字(0-7)并将其解释为八进制整数。序列可能以符号(“+”或“-”)开头。
x 十六进制整数 读取一系列数字(0-9 和 A-F)并将其解释为十六进制整数。它可以以“0x”开头。序列可能以符号(“+”或“-”)开头。
f, e, ga 浮点数 读取有效的字符序列并将其解释为浮点数。有效序列至少有一个数字,前面可以有一个符号(“+”或“-”),后面可以跟一个小数点和十进制数字。也可以使用科学记数法(一个数字后跟“e”或“E”和一些数字)。
c 字符 从文件中读取一个字符。如果指定了宽度,则读取指定数量的字符。
s 字符串 读取文件中直到下一个空白字符(空格、制表符、换行符)的所有字符。写入参数的值将在其后附加一个 \0 空终止符。
p 指针 读取一系列表示指针地址的字符。
n 无输入 不从文件中读取任何内容。到目前为止已读取的字符数将写入该参数。该参数必须是指向整数的指针。
% 百分号 读取一个字符,期望它是一个“%”符号。此说明符不与任何参数关联。
[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 \n", a);
printf("b = %d \n", b);
printf("c = %d \n", 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 库

×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持