(二、)fputs(写入)函数的使用
(1.)基本使用形式:int fputs(const char * string,FILE * stream)
意思就是写一个字符串到文件流中去
(2.)具体使用如图:
(3.)所以此时我就将我想要输入到这个文件中的信息给输入到我的相应文件中了(并且此时是直接操作一行数据,不像是fputc每次只可以操作一个字符)
(4.)同理此时我也可以直接从我的键盘中读取信息
#include<stdio.h> int main() { char arr[1024] = { 0 }; fgets(arr,1024, stdin);//从标准输入流读取 fputs(arr, stdout);//输出到标准输出流 //等价于下面这两个函数的使用 gets(arr); puts(arr); return 0; }
(5.)这些就是fgers函数和fputs函数的使用
4.fprintf 和 fscanf 格式化函数的使用
首先使用目的:是为了不仅可以写入读取字符,还可以将那些具有格式的数据也写到文件中去
(一、)fprintf函数(格式化输出)的使用
(1.)基本使用形式,对比于printf (标准输出函数)的使用形式,如图:
这边拿过来再做一个比较,意思就更加清楚
int printf (const char * format)
int fprintf(FILE * stream,const char * format)
(2.)显然一眼可见我的fprintf函数在使用上只是多了一个FILE * stream,这个东西而已,其实也就是说明printf只能针对标准输出流中(stdout)使用,而我的fprintf则不仅可以针对标准输出流使用,还可以针对我所指定的任意流使用(所以高下立判,我的fprintf 针对的流非常多,是高级的)
(3.)所以具体使用如下:
(4.)
1.上面主要的那句 fprintf(ps,“%d %f %s”, s.n, s.score, s.arr);的意思再讲一遍,就是我把格式化数据(就是各种各样类型的数据),都可以写进我的任意的我指定的文件流当中(ps)
2. 如果理解不了可以借用printf 的使用形式进行对比理解 printf(“%d %f %s”, s.n, s.score, s.arr);意思为把这些格式化的数据(各种类型的数据)给输出到我的标准输出(stdout中)(也就是屏幕上),所以此时printf 默认输出的一个流就是标准输出流
(5.)所以此时我的fprintf和printf就显得非常的高级了(因为它们可以读取或者输出各种类型的数据),不像是fputs,fgets,fputc,fgetc 这类函数,只能进行字符串或者字符的输入和输出(捞)
(二、)fscanf函数(格式化输入)的使用
(1.)首先还是基本使用类型,与scanf(标准输入函数)对比,如图:
这边还是一样拿过来对比一下:
int fscanf(FILE * stream,const char * format)
int scanf(const char * format)
(2.)显然一个道理,scanf只能对我的标准输入流进行使用,而我的fscanf不仅……而且……
(3.)具体使用如下:
(4.)所以此时我们就可以非常顺利的用fprintf 将我的格式化数据放入我的文件流中(ps),也可以非常顺利的用 fscanf 将我的格式化数据从文件流(ps)中拿出来使用
(三、)fprintf和fscanf函数对标准输入输出流的使用
这样就是标准输入输出的使用
5.sscanf 和 sprintf 函数的使用
(一、)sscanf函数的基本使用类型如下:
(1.)让我这个英语大高手来给你们介绍一下是什么意思,首先Read formatted data from string
这句英语的意思就是:从一个字符串中读取一个格式化的数据
(2.)使用方法如下:
(3.)注释已经非常清晰了,但是我们还得拿出来讲一遍
sprintf(arr, “%d %f %s”, s.n, s.score, s.arr); 这个的意思就是把格式化的数据转换成字符串存储到arr这个字符数组中
sscanf(arr, “%d %f %s”, &(tmp.n), & (tmp.score), tmp.arr); 这个的意思就是从arr中读取格式化的数据到tmp中
(二、)sprintf 函数的基本使用类型如下:
(1.)这个使用类型的意思就是:写一个格式化的数据到字符串中去(由这句英语Write formatted data to string得到)
(2.)使用方法如下:
(3.)注意点主要就还是它的使用方法:将一个格式化的数据放到字符串中去,也就是这句
sprintf(arr,“%d %f %s”, s.n, s.score, s.arr);代码的理解,我将我的结构体中的各种类型的数据都给放到我的 arr 这个字符串数组当中
(三、)总结 sscanf 和 sprintf 的用法
上述我们讲完了sscanf 和 sprintf 的用法,接下来总结一下:
(1.)sscanf 是从字符串中读取格式化的数据
(2.)sprintf 是把格式化的数据转换成字符串然后输出存储到字符串数组中
6.scanf / fscanf / sscanf 和 printf / fprintf / sprintf 的对比
scanf / fscanf / sscanf
printf / fprintf / sprintf
(1.)scanf / printf 是针对标准输入输出流的格式化输入输出语句
(2.)fscanf / fprintf 是针对所有输入输出流的格式化输入输出语句
(3.)sscanf / sprintf 中的sscanf 是从字符串中读取格式化的数据,而sprintf 是把格式化的数据转换成字符串然后输出存储到字符串数组中
7.fread(二进制输入) 和 fwrite(二进制输出)函数的使用
(一、) fwrite(二进制输出)
(1.)基本的使用形式如图:
(2.)size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );这句代码的意思就是Write block of data to stream这个的意思:中文意思就是从一个数组中读取多少大小,多少数量的数据到我的文件流中
(3.)具体使用方法就是如图:
此时就是我使用这个二进制输出函数在我的流文件中写入了一个二进制形式的代码,所以当我打开我的文件时,此时文件中显示的就是一推的二进制的随机值(我看不懂的东西)
(二、)fread(二进制输入)函数的使用
(1.)使用的基本形式:
(2.)意思为从一个文件流中读取一个多少大小,多少个数的数据到我的数组中去
(3.)具体使用方法如下:
此时我就成功的把我的指定流文件中的二进制文件给读取出来了
8.fseek函数的使用(文件的随机读取)
(1.)基本的使用形式:
(2.)主要的意思就如int fseek ( FILE * stream, long int offset, int origin ); 意思就是Reposition stream position indicator,中文意思:就是根据文件指针位置的偏移量来定位文件指针(以起始位置和偏移量来定位此时文件指针的位置)
然而我要如何来确定我的起始位置呢?所以这个函数在使用的时候关于起始位置(origin)就有3个选项,如上图表格中所示(SEEK_SET(文件的起始位置)、SEEK_CUR(文件指针的当前位置)、SEED_END(文件的末尾位置))通过对这些位置的选择,我来确定我此时的文件的起始位置
(3.)具体使用如下图所示:
(4.)首先我在我的流文件中放入了abcdefghijkl的这些字符,现在使用fseek这个函数对我的流文件进行操作,以当前位置为起始位置进行皮偏移量为2的偏移,所以此时进行偏移后就可以很好的使我的这个文件指针指向我的 c 这个字符
(5.)所以这个fseek函数是一个可以进行偏移操作的函数(非常的特殊,因为别的函数都不行),这样的话只要我了解文件中有什么内容,我就可以很容易的使用fseek这个函数或得了
四、总结:
(1.)关于文件操作的函数算是大致讲完了,还有一小部分的有关文件操作的只是还没有讲到,谁让明天要体测,哎!所以就先写到这吧!
(2.)总的说就是要去多去用,只有这样才可以更好的知道如何掌握文件的各种操作