fscanf ()- 读取格式化数据
格式
#include <stdio.h>
int fscanf (FILE *stream, const char *format-string, argument-list);语言级别
ANSI
线程安全
是
语言环境敏感
此函数的行为可能受当前语言环境的 LC_CTYPE 和 LC_NUMERIC 类别影响。 如果在编译命令中指定了 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,那么此行为也可能受当前语言环境的 LC_UNI_CTYPE 类别影响。 有关更多信息,请参阅 了解 CCSID 和语言环境。
描述
fscanf() 函数将数据从指定的 流 的当前位置读取到 argument-list中的条目给定的位置 (如果有)。 argument-list 中的每个条目都必须是指向类型与 format-string中的类型说明符对应的变量的指针。
format-string 控制输入字段的解释,并具有与 scanf() 函数的 format-string 自变量相同的格式和函数。
返回值
fscanf() 函数返回其成功转换和分配的字段数。 返回值不包含 fscanf() 函数读取但未指定的字段。
如果在任何转换之前发生输入故障,那么返回值为 EOF ,如果成功,那么返回值为分配的输入项数。
示例
此示例打开文件 myfile 进行读取,然后扫描此文件以查找字符串,长整数值,字符和浮点值。
#include <stdio.h>
#define MAX_LEN 80
int main(void)
{
FILE *stream;
long l;
float fp;
char s[MAX_LEN + 1];
char c;
stream = fopen("mylib/myfile", "r");
/* Put in various data. */
fscanf(stream, "%s", &s [0]);
fscanf(stream, "%ld", &l);
fscanf(stream, "%c", &c);
fscanf(stream, "%f", &fp);
printf("string = %s\n", s);
printf("long double = %ld\n", l);
printf("char = %c\n", c);
printf("float = %f\n", fp);
}
/*************** If myfile contains ************************
**************** abcdefghijklmnopqrstuvwxyz 343.2 ***********
********************** expected output is: *********************
string = abcdefghijklmnopqrstuvwxyz
long double = 343
char = .
float = 2.000000
*/