首页 理论教育 C语言程序设计教程:字符读写函数

C语言程序设计教程:字符读写函数

时间:2023-10-23 理论教育 版权反馈
【摘要】:字符读写函数是以字符(字节)为单位的读写函数。对于fgetc()函数的使用有以下几点说明。在fgetc()函数调用中,读取的文件必须是以读或读写方式打开的。例11-3运行视频程序中定义了两个文件指针fpl和fp2,分别指向datal.txt和data2.txt文件。

C语言程序设计教程:字符读写函数

字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或向文件写入一个字符。多用于对文本文件的操作。

1.读字符函数fgetc()

fgetc()函数的功能是从指定的文件中读一个字符,函数调用的形式如下:

字符变量=fgetc(文件指针);

例如:

ch=fgetc(fp);

其意义是从打开的文件fp中读取一个字符并送入ch中。

对于fgetc()函数的使用有以下几点说明。

(1)在fgetc()函数调用中,读取的文件必须是以读或读写方式打开的。

(2)读取字符的结果也可以不向字符变量赋值,但是读出的字符不能保存。

例如:

fgetc(fp);

(3)在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc()函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc()函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针底向后移动,它不需在程序中定义说明,而是由系统自动设置。

(4)读取文件时如何测试文件是否结束呢?文本文件的内部全部是ASCII码,其值不可能是EOF(-1),所以可以使用EOF(-1)来确定文件的结束,但是对于二进制文件不能这样做,因为可能文件中某个字节的值恰好等于-1,如果此时使用来-1判断文件结束是不恰当的。为了解决这个问题,后续提供了feof()函数以判断文件是否真正结束。

【例11-1】读入正在编写的11-1.c文件,并在屏幕上输出。

例11-1 运行视频

本例程序的功能是从文件中逐个读取字符,在屏幕上显示。程序定义了文件指针fp,以读文本文件方式打开当前目录下的11-1.c文件,并使fp指向该文件。如打开文件出错,给出提示并退出程序。程序第12行先读出一个字符,然后进入循环,只要读出的字符不是文件结束标志(每个文件末有一结束标志“EOF”)就把该字符显示在屏幕上,再读入下一字符。每读一次,文件内部的位置指针向后移动一个字符,文件结束时,该指针指向EOF。执行本程序将显示整个文件。

2.写字符函数fputc()

fputc()函数的功能是把一个字符写入指定的文件中,函数调用的形式如下:

fputc(字符量,文件指针);

其中,待写入的字符量可以是字符常量或变量。

例如:(www.xing528.com)

fputc('a',fp);

其意义是把字符a写入fp所指向的文件中。

对于fputc()函数的使用要说明以下几点。

(1)被写入的文件可以用写、读写、追加的方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符从文件尾开始存放,则必须以追加方式打开文件。若被写入的文件不存在,则应创建该文件。

(2)每写入一个字符,文件内部位置指针向后移动一个字节。

(3)fputc()函数有一个返回值,如写入成功则返回写入的字符,否则返回“EOF”。用户可用此来判断写入是否成功。

【例11-2】从键盘输入一行字符,写入一个文件,再把该文件内容读出,并显示在屏幕上。

例11-2 运行视频

程序中第6行以读写文本文件方式打开文件string。程序第13行从键盘读入一个字符后进入循环,当读入字符不为回车符时,则把该字符写入文件之中,然后继续从键盘读入下一字符。每输入一个字符,文件内部位置指针向后移动一个字节。写入完毕,该指针已指向文件末。如要把文件从头读出,则须把指针移向文件首,程序第19行rewind()函数用于把fp所指文件的内部位置指针移到文件首。第20至25行用于读出文件中的一行内容。

程序运行结果如图11-1所示。

图11-1 写文件测试图

【例11-3】将文件datal.txt 中的内容复制到文件data2.txt 中。

例11-3 运行视频

程序中定义了两个文件指针fpl和fp2,分别指向datal.txt和data2.txt文件。如文件不存在,则给出提示信息。程序第18行和19行用循环语句逐个读出datal.txt中的字符再送到文件data2.txt中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈