fscanf

fscanf

C语言中的函数
fscanf 函数原型为 int fscanf(FILE * stream, const char * format, [argument...]); 其功能为根据数据格式(format),从输入流(stream)中读入数据,存储到argument中,遇到空格和换行时结束。fscanf位于C标准库头文件中。[1]
  • 中文名:文件格式输入
  • 外文名:File Scan Format
  • 别名:
  • 类别:计算机软件
  • 简述:C语言中基本的文件操作
  • 函数名:fscanf
  • FILE*stream:文件指针

fscanf 一般形式

函数声明

int fscanf(FILE *stream, char *format);

参数

stream-- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

format-- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符和format 说明符。  format 说明符形式为[=%[*][width][modifiers]type=]

功 能

从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

返回值

整型,成功返回读入的参数的个数,失败返回EOF(-1)。  

格式字符详解

format 说明符形式为[=%[*][width][modifiers]type=]

具体讲解如下:  

参数

描述

*

这是一个可选的星号,表示数据是从流 stream 中读取的,但是可以被忽视,即它不存储在对应的参数中。

width

这指定了在当前读取操作中读取的最大字符数。

modifiers

为对应的附加参数所指向的数据指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小: h :短整型(针对 d、i 和 n),或无符号短整型(针对 o、u 和 x) l :长整型(针对 d、i 和 n),或无符号长整型(针对 o、u 和 x),或双精度型(针对 e、f 和 g) L :长双精度型(针对 e、f 和 g)

type

一个字符,指定了要被读取的数据类型以及数据读取方式。具体参见下一个表格。

fscanf 类型说明符

%d:读入一个十进制整数。

%i :读入十进制,八进制十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25。

%u:读入一个无符号十进制整数。

%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入。

%x %X: 读入十六进制整数。

%o': 读入八进制整数。

%s : 读入一个字符串,遇空字符‘0'结束。

%c : 读入一个字符。无法读入空值。空格可以被读入。  

附加格式说明字符表修饰符说明

L/l 长度修饰符 输入"长"数据

h 长度修饰符 输入"短"数据

程序例

示例一

#include 

#include 

int main()

 

{

   char str1[10], str2[10], str3[10];

   int year;

   FILE * fp;

   fp = fopen ("file.txt", "w+");

   fputs("We are in 2014", fp);

      rewind(fp);

   fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);

      printf("Read String1 |%s|n", str1 );

   printf("Read String2 |%s|n", str2 );

   printf("Read String3 |%s|n", str3 );

   printf("Read Integer |%d|n", year );

   fclose(fp);

      return(0);

 

}

输出结果:

Read String1 |We|

Read String2 |are|

Read String3 |in|

Read Integer |2014|

示例二

附:MSDN中例子

#include 

FILE *stream;

int main(void)

{

    long l;

    float fp;

    char s;

    char c;

    stream = fopen("fscanf.out", "w+");

    if(stream==NULL)

    printf("The file fscanf.out was not openedn");

    else

    {

        fprintf(stream,"%s%ld%f%c","a-string", 65000,3.14159, 'x');

        /*将指针设置至文件开头*/

        fseek(stream,0L,SEEK_SET);

        /*从文件中读取数据*/

        fscanf(stream,"%s",s);

        fscanf(stream,"%ld",&l);

        fscanf(stream,"%f",&fp);

        fscanf(stream,"%c",&c);

       /*输出读取的数据*/

        printf("%sn",s);

        printf("%ldn",l);

        printf("%fn",fp);

        printf("%cn",c);

        fclose(stream);

    }

    return 0;

}//这样会有意外输出

相关词条

相关搜索

其它词条