C语言:文件操作(三)

  一、文件的读写操作

  文件的读写操作依靠某些函数实现,以下会介绍三组函数

第一组:
fgetc()字符输入函数  
fputc()字符输出函数  
第二组:
fgets()文本行输入函数
fputs()文本行输出函数
第三组:
fscanf()格式化输入函数
fprintf()格式化输出函数

第一组:

fputc()函数

#include<stdio.h>
int fputc(int character,FILE*stream)
功能:写入字符在文件中
参数:字符的ASCII码   文件指针

  举个例子:将字符a写入一个data.txt 的文本文件里

 运行代码:

  因为只执行写的操作,所以文件打开方式设置为“w”

  运行程序后,可以去看看该test.c所在目录下的data.txt文件,字符a已经写入:

fgetc()函数

#include<stdio.h>
int fgetc(FILE*stream)
功能:按顺序读取文本的每一个字符,返回其ASCII码值,读取失败,返回EOF
参数:文件指针

  举个例子:读取data.txt文本文件中的内容并拷贝,输出到屏幕(类似复制粘贴)

  这里我们事先在test.c所在目录中创建一个data.txt文件,里面写有内容:abcdefg

如图:

运行代码:

  因为只执行读的操作,所以文件打开方式设置位"r"

运行结果:

  奇怪,为什么打印出来的不是abcdef?而是bdf,这里我们就需要深入了解文件读写函数运行的实质——光标移动。

  每一次光标移动,fgetc()函数会返回一个ASCII码值。

  回头看看上面的情况,我们发现,经过每一轮循环,我们用了2次fgetc()函数(循环判断条件语句和循环内语句各占一次),所以光标在每次循环中移动2位,但是每轮循环只执行1次打印。

  因此,只打印了3个字符。

这里是修改版本:

第二组:

fputs()函数

#include<stdio.h>
int fputs(const char*str,FILE*stream)
功能:将字符串写入文件中
参数:字符串地址  文件指针

  同样的,我们事先在test.c文件所在目录中创建一个data.txt的空文本文件:

如图:

运行代码:

  因为只执行写的操作,所以文件打开方式设置位“w”

运行结果:

fgets()函数

#include<stdio.h>
char*fgets(char*str,int num,FILE*stream)
功能:从流中读取数据,读取的数据放入str指向的这块空间中,最多读取num个
参数:要放入数据的空间   最多读取的字符数(包括'\0'结束标志) 文件指针

  注意:

 假设你要读取‘abc’这个字符串并且放入字符数组arr ch[20]中,那么这个参数int 要输入4,而不是3,因为字符串‘abc’其实包含结束标志'\0',这个结束标志也算被读取的字符

举例:读取data.txt文件里面的“abc”存入字符数组ch中,打印ch的内容

首先,在test.c文件所在的目录下创建一个data.txt 文件,文件内容为“abc”

运行代码:

  因为只进行读操作,所以打开方式选择“r”

运行结果:

第三组:

fprintf()函数

#include<stdio.h>
int fprintf(FILE*stream,const char*format,...)
功能:将列表中的数据写入文件中
参数:文件指针  格式  可变参数列表

和恢复

  这个函数乍一看名字与printf()函数十分相似,如果不细心看还有可能弄混,如果去研究二者的形式参数,你就会发现,他们的参数也是十分像的,因此,只要你会使用printf()函数,这个函数也是可以轻松掌握的。

  那就来对比看看二者的参数:

参数对比
int printf(const char* format,...)

int fprintf(FILE*stream,const char*format,...)
二者只差了一个FILE*stream

  printf()函数的功能是将变量的内容打印到屏幕上,而fprintf()函数的功能是将变量的内容打印到指定文件中,当然,fprintf()函数也可以将变量的内容打印到屏幕上,下面会介绍。

例子:将源代码里面的变量的信息写入文件中

  首先,在test.c文件所在目录下创建一个data.txt文本文件,文件内容为空:

运行代码:

  因为只执行写的操作,所以文件打开方式选择”w”

运行结果:

  可以看到,源代码里面的变量字符数组ch和整型a的内容都被写入文件中。与fputc()函数和fputs()函数不同的是,前者写入文件的内容是变量的内容,而后者写入的内容不是变量的内容。

利用fprintf()函数将变量的内容打印到屏幕中:

 这里要使用到前面文章C语言:文件操作(一)里介绍的标准输出流stdout。

 只要将fprintf()函数的文件指针的参数传入stdout就行,因为在文章里就说过,三种标准流其实就是文件指针类型的变量。

fscanf()函数

#include<stdio.h>
int fscanf(FILE*stream,const char*format,...)
功能:读取数据,放到指定的内存空间中
参数:文件指针  格式  可变参数列表

  这个函数与scanf()函数也是十分相似,因此我们来对比一下二者:

参数对比:
int scanf(const char*format,...)

int fscanf(FILE*stream,const char*format,...)
二者只差了一个FILE*stream

 scanf()函数的作用是按照格式读取键盘上输入的数据,并赋值给指定的变量,而fscanf()函数的作用就是按照格式读取指定文件的内容,并赋值给指定的变量。

举例:读取文件内容,并赋值给指定变量

  首先,在test.c文件所在目录下有一个data.txt文本文件,它是我们上一个函数的产物。

运行代码:

  打开方式选择“r"

运行结果:

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值