实现C语言程序的存储读取功能

前言

因为我们学校教的C语言在文件存储方面是自学,所以这部分内容需要通过书籍和网上教程,但网上的教程我感觉不好理解,于是看了我们的课本《C语言程序设计教程》(说句实话,我觉得写的挺好的,能让我很轻松了解一些概念),并且总结了一些关于C语言程序数据从内存存到外部存储空间的一些写法,想要分享给大家。由于本人才刚学C语言,有很多不合理或优化的地方,欢迎大家指出!


文件指针

因为C语言标准库中定义了结构体类型FILE,存在于<stdio.h>,所以,在使用文件的程序中,涉及文件操作的操作第一句基本都是定义一个指向文件结构体指针变量,即

FILE *fp; //fp为变量名


文件的打开和关闭

文件的打开

我们在使用例如txt文档对程序内存使用读写操作时,必须先打开文件,当然如果想让一个程序在陌生的环境运行时自动创建文件也是包含在文件的打开操作中。
打开用的是fopen函数,例如

FILE *fp //创建文件指针
fp=fopen("file.txt","w");


首先我们用文件指针指向fopen函数,然后函数内部有两个参数需要我们填入,即
文件名.txt 和 执行的操作
文件名不用多说,就是你想存在哪个txt文档就在哪个txt文档中,唯一有区别的就是执行的操作
具体执行的操作是比较深入的内容了,感兴趣的伙伴可以点击上文链接的书籍,在7.2中有表来解释。我们这次使用的 
w 操作是
”打开一个文本文件,可以向文件写入数据。如果文件存在,要将文件的长度截为0,如果文件不存在则先创建之。”
简单说就是,每次打开先看有没有这个文件,如果有就打开,并且清空里面的内容,如果没有这个文件就创建一个。
所以这个“
w”操作我一般用于一开始初始化环境的时候,把个个文件都创建出来。但他清空内容的特性注定决定在我们下一次使用的时候不能用这个方式来读取数据,这个时候我们需要用到


FILE *fp //创建文件指针
fp=fopen("file.txt","r");

 “r”操作相对与“w”操作好理解多了,就是单纯的打开文件,读取文件。


文件的关闭

文件的关闭相对于打开就简洁了不少,只需要输入

fclose(fp); //其中 fp 是文件指针变量。

至于使用文件关闭的原因,就是将缓冲区剩余数据写入外存储器,所以也是很重要的!
不过要注意的是,文件的关闭一定要在程序的最后执行,如果关闭后再执行文件的输入与输出那么这一部分输入输出的操作是无效的!


文件的输入与输出

首先我要声明的一点是,txt文档保存的是char型数据,我在第一次使用的时候是通过(char)强制转换把int型数据转为char型数据来保存int类型数据,但这样的保存缺点是存储的 int类型数据不能超过255,否则会出现问题(具体原理你们感兴趣可以查查为什么char int long int double 的字节占用大小)所以如果有小伙伴想要存储比较大的数字例如2333尽量用字符串存储。


读写字符

1.读就是使用fputc函数,具体格式

fputc(a,fp); //achar 型变量

作用就是将变量a存储的字符写入fp指向的文件 也就是我们说的“写”

2.对应的“读”就是fgetc函数

ch=fgetc(fp)

作用从fp所指文件读取字符赋值给ch(char型)变量中


读写字符串

1.写入字符串

fgets(str,fp);

将字符串str写入进fp所指文件,要注意str是字符串不是字符。

2.读取字符串

fgets(str,0,fp);

 读取的格式不太一样,str是字符串,后面的整数参数是字符串下标,fp是所指文件


使用心得

接下来就是我个人的一些使用心得了

在具体使用的时候我需要把二维字符串存储,但是这些函数并没有输入二维字符串的意思,不过我们可以通过一些特殊标识符来将二维数组压成一维数组来存储,例如我有个字符串str[2][10] 在str[0]中内容是“str1”,str[1]内容是"str",那么我们在存储的时候就可以存储为"str1,str2",用特殊符","来分辨字符串第一个下标,这样在读取的时候就可以通过特殊标识符来区分是否该换第一个标识符了。而且读取的过程就是将文件复制在内存中。

以及在第二第三次使用最后写入的时候一定要注意先把文件清空,这是很重要的,虽然我们的输入是覆盖之前的内容,但是是跟长度有关系的,例如我之前存储内容是abcd,但下一次我应该存储123,可是你没有提前清空文件原来有的内容的话赋值内容就会成为123d,多了一个d,那么后面程序的运行结果肯定也会有问题。


最后希望对大家有所帮助!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值