fscanf函数和fprintf函数fgets函数和fputs函数fread函数和fwrite函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fscanf函数和fprintf函数fgets函数和fputs函数fread函数和fwrite函数相关的知识,希望对你有一定的参考价值。

  1. fscanf 函数和 fprintf 函数

  1.1 fscanf 函数

  fscanf 函数只能从文本文件中按格式输入。fscanf 函数和 scanf 函数相似,只是输入的对象是磁盘上文本文件的数据。函数的调用形式如下:

    fscanf( 文件指针,格式控制字符串,输入项表 );

  例如,若文件指针 fp 指向一个已打开的文本文件,a、b 分别为整型变量,则以下语句从 fp 所指的文件中读入两个整数放入变量 a 和 b 中:

    fscanf( fp, "%d%d", &a, &b );

  注意:文件中的两个整数之间用空格(跳格符、回车符)隔开。

    fscanf( stdin, "%d%d", &a, &b );

  等价于:

    scanf( “%d%d”, &a, &b );

  因为文件指针 stdin 代表终端键盘。

  1.2 fprintf 函数

  fprintf 函数按格式将内存中的数据转换成对应的字符,并以 ASCII 代码形式输出到文本文件中。fprintf 函数和 printf 函数相似,只是输出的内容将按格式存放在磁盘的文本文件中。函数的调用形式如下:

    fprintf( 文件指针,格式控制字符串,输出项表);

  例如,若文件指针 fp 指向一个已打开的文本文件,x、y 分别为整型变量,则以下语句将把 x 和 y 两个整型变量中的整数按 %d 格式输出到 fp 所指的文件中。

    fprintf( fp, "%d %d", x, y );

  注意:为了便于以后读入,两个数之间应当用空格隔开。同时为了以后便于读入,最好不要输出附加的其他字符串。

    fprintf( stdout, "%d %d", x, y);

  等价于:

    printf("%d %d", x, y);

  文件指针 stdout 代表终端屏幕。

  2. fgets 函数和 fputs 函数

  2.1 fgets 函数

  fgets 函数用来从文件中读入字符串。fgets 函数的调用形式如下:

    fgets( str, n, fp );

  此处,fp 是文件指针,str 是存放字符串的起始地址,n 是一个 int 型变量。函数的功能是从 fp 所指文件中读入 n-1 个字符放入以 str 为起始地址的空间内。如果在未读满 n-1 个字符时,已读到一个换行符或一个 EOF(文件结束标志),则结束本次读操作,读入字符串的最后包含读到的换行符。因此,调用 fgets 函数时,最多能读入 n-1 个字符。读入结束后,系统将自动在最后加 ‘\0‘,并以 str 作为函数值返回。

  2.2 fputs 函数

  fputs 函数用来把字符串输出到文件中。fputs 函数的调用形式如下:

    fputs( str, fp );

  此处,fp 是文件指针;str 是待输出的字符串,可以是字符串常量、指向字符串的指针或存放字符串的字符数组名等。用此函数进行输出时,字符串中最后的 ‘\0‘ 并不输出,也不自动加 ‘\n‘。输出成功函数值为正整数,否则为 -1(EOF)。

  需要注意的是:调用函数输出字符串时,文件中个字符串将首尾相接,它们之间将不存在任何间隔符。为了便于读入,在输出字符串时,应当注意人为地加入诸如 "\n" 这样的字符串。

  3. fread 函数和 fwrite 函数

  fread 函数和 fwrite 函数分别用来读、写二进制文件。它们的调用形式如下:

    fread( buffer, size, count, fp );

    fwrite( buffer, size, count, fp );

  其中,buffer 是数据块的指针,对 fread 来说,它是内存块的首地址,输入的数据存入此内存块中;对于 fwrite 来说,它是准备输出的数据块的起始地址。size 表示每个数据块的字节数。count 用来指定读、写一次,输入或输出数据块的个数(每个数据块具有 size 字节)。

  例如有以下结构体:

    struct st

    {

      char num[8];

      float mk[5];

    } pers[30];

  假设 pers 数组每个元素包含有学生的学号和五门课的成绩,并假设 pers 数组的30个元素中都已有值,文件指针 fp 所指文件已正确打开,则执行以下循环将把这30个元素中的数据输出到 fp 所指文件中。

    for( i = 0; i < 30; i++ )

    {

      fwrite( &pers[i], sizeof( struct st ), 1, fp );

    }

  以上 for 循环中,每执行一次 fwrite 函数调用,就从 &pers[i] 地址开始输出由第三个参数指定的“1”个数据块,每个数据块含有 sizeof( struct st ) 个字节,也就是一次输出一个结构体变量中的值。

  也可以用以下步骤从上面建立的文件中再次将每个学生的数据逐个读入到 pers 数组中。这时,文件必须为“读”而打开。

    i = 0;

    fread( &pers[i], sizeof( struct st ), 1, fp );

    while ( !feof( fp ) )

    {

      i++;

      fread( &pers[i], sizeof( struct st ), 1, fp );

    }

以上是关于fscanf函数和fprintf函数fgets函数和fputs函数fread函数和fwrite函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言fputs fgets fputc fgetc fscanf fprintf及fopen操作的整理

C 语言文件操作 (fscanffprintf 函数)

c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

文件读写函数

C 语言文件操作 ( fwrite 函数 )

C语言fscanf/fprintf函数(格式化读写文件)的用法(%[]和%n说明符)