前面章节讨论了将数据写入文件和从文件中读取数据的方法。在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。下面通过两个示例展示文件“读写”模式的使用方法。......
2023-11-20
文件打开以后,就可以对文件进行读和写了,读和写是最常用的文件操作。
C语言提供了多种文件读写的函数:
(1)字符读写函数:fgetc()和fputc()。字符读写函数是以字符(字节)为单位的读写函数,每次可从文件读出或向文件写入一个字符。
(2)字符串读写函数:fgets()和fputs()。
(3)数据块读写函数:freed()和fwrite()。
(4)格式化读写函数:fscanf()和fprinf()。
注意:使用以上函数都要求包含头文件stdio.h。
1.写字符函数fputc()
fputc()函数的功能是把一个字符写入指定的文件中,即将字符表达式的字符输出到文件指针所指向的文件。若输出操作成功该函数返回输出的字符,否则返回EOF。函数调用的形式为:
fputc(字符表达式,文件指针);
其中,待写入的字符可以是字符常量或变量。例如fputc(’a’,fp);
其意义是把字符a写入fp所指向的文件中。
注意:
(1)被写入的文件可以用写、读写、追加方式打开。用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件开头开始。如需保留原有文件内容,希望写入的字符从原有文件末尾开始存放,则应以追加方式打开文件。被写入的文件若不存在,则创建该文件。
(2)每写入一个字符,文件内部位置指针向后移动一个字节。
(3)fputc()函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可以利用该返回值来判断写入操作是否成功。
例9.1 从键盘输入一字符串,并逐个将字符串的每一个字符传送至磁盘文件A.dat中,当输入的字符为’#’时停止输入。
例9.2 将一个磁盘文件中的信息复制到另一个磁盘文件中。
例9.2中的程序是按处理文本文件的方式来编写的。也可以用此程序来复制一个二进制文件,只需将两个fopen()函数中的“r”和“w”分别改为“rb”和“wb”即可。
2.读字符函数fgetc()
fgetc()函数的功能是从指定的文件中读一个字符,该字符的ASCII码值作为函数的返回值。若读取字符时文件已经结束或出错,fgetc()函数返回文件结束标记EOF,此时EOF的值为-1。函数调用的形式为:
字符变量=fgetc(文件指针);
例如:
ch=fgetc(fp);
其意义是从打开的文件fp中读取一个字符并传送至ch中。
注意:
(1)在fgetc()函数调用中,读取的文件必须是以读或读写方式打开的。
(2)读取字符的结果也可以不向字符变量赋值。例如:
fgetc(fp);
采取这样的操作,读出的字符不能保存的。
(3)在文件内部有一个位置指针,用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc()函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc()函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
例9.3 将例9.1中的建立的文件A.dat的内容在屏幕上显示。
3.读字符串函数fgets()
fgets()函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
其中的n是一个正整数,表示从文件中读出的字符串不超过n-1个字符。在读入的最后一个字符后加上串结束标志’\0’。例如:
fgets(str,n,fp);
其意义是从fp所指的文件中读出n-1个字符并传送至入字符数组str中。
例9.4 从A.dat文件中读入一个含10个字符的字符串。(www.chuimin.cn)
本例中定义了一个字符数组str(共11个字节),在以读文本文件方式打开文件A.dat后,从中读出10个字符并传送至str数组,在数组最后一个单元内将加上'\0',然后在屏幕上显示输出str数组。
注意:
(1)在读出n-1个字符之前,如遇到了换行符或EOF,则读取结束。
(2)fgets()函数也有返回值,其返回值是字符数组的首地址。
4.写字符串函数fputs()
fputs()函数的功能是向指定的文件写入一个字符串,其调用形式为:
fputs(字符串,文件指针);
其中字符串可以是字符串常量,也可以是字符数组名,或数组型指针变量。字符串末尾的’\0’不输出。若输出成功函数值返回0,失败则为EOF。例如:
fputs(“abcd”,fp);
其意义是把字符串“abcd”写入fp所指的文件之中。
例9.5 在文件A.dat中追加一个字符串。
本例要求在string文件末加写字符串,因此在程序第7行以追加读写文本文件的方式打开文件string。然后输入字符串,并用fputs()函数把该字符串写入文件string。在程序第15行用rewind()函数把文件内部位置指针移到文件首,再使用了循环语句逐个显示当前文件中的全部内容。
5.数据块读写函数fread()和fwrite()
C语言还提供了用于整块数据的读写的函数,可用来读写一组数据(如一个数组元素、一个结构变量的值等)。
读数据块函数调用的一般形式为:
fread(buffer,size,count,fp);
写数据块函数调用的一般形式为:
fwrite(buffer,size,count,fp);
其中,buffer是一个指针。在fread()函数中,buffer表示存放输入数据的首地址。在fwrite()函数中,它表示存放输出数据的首地址。size表示数据块的字节数,count表示要读写的数据块块数,fp表示文件指针。
例如:
fread(fa,4,5,fp);
其意义是从fp所指的文件中,每次读4个字节(1个实数)传送至实数组fa中,并连续读5次,即读5个实数到fa中。
例9.6 从键盘输入两个学生数据并写入一个文件中,再读出这两个学生的数据显示在屏幕上。
#include“stdio.h”
#include“stdlib.h”
struct stu
本例程序中定义了一个结构stu,说明了两个结构数组boya和boyb以及两个结构指针变量pp和qq,pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件“stu_list”,然后输入两个学生数据并写入该文件中,然后把文件内部位置指针移到文件首,读出两块学生数据并在屏幕上显示。
6.格式化读写函数fscanf()和fprintf()
fscanf()函数与fprintf()函数与前面使用的scanf()和printf()函数的功能相似,都是格式化读写函数。两者的区别在于:fscanf()函数和fprintf()函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为:
fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列);
例如:
fscanf(fp,“%d%s”,& i,s);
fprintf(fp,“%d%c”,j,ch);
用fscanf()和fprintf()函数也可以完成例9.6的问题。
例9.7 从键盘输入两个学生数据并写入一个文件中,再读出这两个学生的数据显示在屏幕上,请与例9.6比较。
与例9.6相比,本程序中fscanf()和fprintf()函数每次只能读写一个结构数组元素,因此采用了循环语句来读写全部数组元素。还要注意指针变量pp,qq,由于循环改变了它们的值,因此在程序的25行和32行分别对它们重新赋予了数组的首地址。
有关C语言程序设计 第2版的文章
前面章节讨论了将数据写入文件和从文件中读取数据的方法。在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。下面通过两个示例展示文件“读写”模式的使用方法。......
2023-11-20
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。表9.1文件操作方式例如:打开当前目录下的C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。......
2023-10-21
文本文件的结束以ASCII码的控制字符0x1A表示。使用流成员函数读取文件数据常用的输入流成员函数有get、getline和read等。虽然给出长度参数,但当遇到文件结束标记或者文件结束时读操作结束。例如,和上例相同功能的程序如下:3.文本文件的读写示例分析以下程序的执行结果。程序的执行结果如下:His编写一个程序,将文本文件test.txt复制到文本文件real.txt。......
2023-11-07
例如,起始位置为文件头,偏移量为50,则表示将读写指针移到相对文件头距离50个字节的位置。表9.2文件指针起始位置的设置方法说明: 0表示相对于文件头; 1表示相对于文件的当前位置; 2表示相对于文件尾。例9.8建立一个数据文件,随机读取其中的某个数据。例9.9文件位置指针复位函数rewind()的应用。例9.10编写一个程序使用frell()函数估算一个文件的大小。......
2023-11-18
在文件in.txt中有两个用逗号分开的整数,请编写程序求出这两个整数之间的所有素数,并将求出的素数依次写到文件out.txt中。②写入文件out.txt中的数据用空格分隔。在需要按某种格式处理文件数据的程序中,特别要注意正确书写格式控制字符串中的输入输出控制格式,请读者参照程序中注释进行分析理解。......
2023-11-20
C程序中,处理文件数据的过程可以分为3个主要步骤:①打开要处理的文件;②按某种方式处理文件;③关闭文件。表7.1文件模式及意义续表打开或建立指定文件成功时,fopen函数将返回一个文件类型变量的地址,该地址应赋值给FILE类型指针变量;若打开或建立文件失败,fopen函数返回一个空指针值。......
2023-11-20
函数fwrite的功能则是将内存储器中指定区域的数据块写入与文件指针stream相关联的文件中。将一个5×10的整型二维数组数据存入指定文件中。编写程序实现功能:将例7.10所创建文件中的数据读出,并将数据按5行10列的矩阵形式进行显示。由于要接收从文件中读出的二维数组数据,程序中需要定义构成方式与之对应的二维数组。......
2023-11-20
如果已经结束则返回值为非0值;否则返回0,表示文件尚未结束。例9.11从键盘上输入一个长度小于20的字符串,将该字符串写入文件“file.dat”中,并测试是否有错。......
2023-11-18
相关推荐