Menu
×
   ❮   
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);

定义和用法

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

The 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”开头。序列前面可以有符号(“+”或“-”)。
fega 浮点数 读取有效的字符序列并将其解释为浮点数。有效的序列至少包含一个数字,它可以以符号(“+”或“-”)开头,后面可以跟着小数点和小数位。还可以使用科学计数法(一个数字后跟“e”或“E”和一些数字)。
c 字符 从文件中读取一个字符。如果指定了宽度,则读取该数量的字符。
s 字符串 读取文件中直到下一个空格(空格、制表符、换行符)的所有字符。写入参数的值将附加一个额外的 \0 空终止字符。
p 指针 读取表示指针地址的字符序列。
n 无输入 没有从文件中读取任何内容。到目前为止已读取的字符数写入参数中。该参数必须是指向整数的指针。
% 百分号 从文件中读取一个字符,期望为“%”符号。此说明符不与任何参数关联。
[characters] 字符集 读取一个与characters中指定的字符之一匹配的字符。
[^characters] 排除字符集 读取一个不在characters中指定的字符集中的字符。

有关如何使用格式说明符的示例,请参见下面的“更多示例”。


语法

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

参数值

参数 描述
fptr

必填。文件指针,通常由 fopen() 函数创建。
格式 必填。表示从文件中读取的数据格式的字符串。
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 库

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.