《c语言程序设计》txt,《C语言程序设计》期末考点2:读写TXT文档

本文详细介绍了C语言中用于读取文件的fgets()函数和写入文件的fputs()函数的使用方法。fgets()函数可以从指定文件中读取一行字符串,保留换行符,而fputs()则可以将字符串写入文件。通过示例代码展示了如何使用这两个函数,并解释了文件打开模式如'r', 'w', 'a', 'r+', 'w+', 'a+'等的含义及其应用场景。
摘要由CSDN通过智能技术生成

继承之前的代码,现在程序要求:读取一个TXT文档及写入对应的信息。

一、读取文件内容

首先在程序里面创建一个TXT文档:

d8a3392119958303bc7fed2bb880c943.png

结构如下,并在TXT中写入一行字:

94fdca7a1943086e82a4da3cef4cc092.png

采用的是fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的用法为:

char *fgets ( char *str, int n, FILE *fp );

str 为字符数组,n 为要读取的字符数目,fp 为文件指针。

返回值:读取成功时返回字符数组首地址,也即 str;读取失败时返回 NULL;如果开始读取时文件内部指针已经指向了文件末尾,那么将读取不到任何字符,也返回 NULL。

注意,读取到的字符串会在末尾自动添加 '\0',n 个字符也包括 '\0'。也就是说,实际只读取到了 n-1 个字符,如果希望读取 100 个字符,n 的值应该为 101。例如:

4b7fbae69b649f03709df670fe387ce1.png

表示从 D:\\demo.txt 中读取 100 个字符,并保存到字符数组 str 中。

需要重点说明的是,在读取到 n-1 个字符之前如果出现了换行,或者读到了文件末尾,则读取结束。这就意味着,不管 n 的值多大,fgets() 最多只能读取一行数据,不能跨行。在C语言中,没有按行读取文件的函数,我们可以借助 fgets(),将 n 的值设置地足够大,每次就可以读取到一行数据。

MyMain.c代码没有改变,但是myTools.h代码改变如下:注意编译的时候要选中MyMain.c否则会报错:

32cddf896a2b631f76016a029e940a0f.png

效果如下:

804fe23ed841e2b3a810583e31bde18c.png

fgets() 遇到换行时,会将换行符一并读取到当前字符串。该示例的输出结果之所以和calendar .txt 保持一致,该换行的地方换行,就是因为 fgets() 能够读取到换行符。而 gets() 不一样,它会忽略换行符。

二、写入文件

fputs() 函数用来向指定的文件写入一个字符串,它的用法为:

int fputs( char *str, FILE *fp );

str 为要写入的字符串,fp 为文件指针。写入成功返回非负数,失败返回 EOF。例如:

5cf82253f0f369fc21cf042e353fd806.png

表示把把字符串 str 写入到 D:\\demo.txt 文件中。

里面的fopen()函数的参数里面的at+表示的是以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。t表示文本文件方式读取。

fopen()具体参数如下:

打开方式

说明

"r"

以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。

"w"

以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。

"a"

以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。

"r+"

以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。

"w+"

以“写入/更新”方式打开文件,相当于w和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。

"a+"

以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。

MyMain.c代码没有改变,但是myTools.h代码改变如下:注意编译的时候要选中MyMain.c否则会报错:

0b376e837f4abcfb3299b9a97b5b3347.png

效果如下:

7cef0945e9c2a26aae71a736bb2bf93b.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值