首页 理论教育 文件的读写|C语言程序设计基础教程|示例和程序运行结果

文件的读写|C语言程序设计基础教程|示例和程序运行结果

时间:2023-10-27 理论教育 版权反馈
【摘要】:知识学习对文件的读和写是最常用的文件操作。c.在文件内部有一个位置指针,用来指向文件的当前读写字节。图9.1例9.1 程序运行结果本例程序的功能是从文件中逐个读取字符,在屏幕上显示。例9.2从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。例9.3从a.txt 文件中读入一个含10 个字符的字符串。图9.4程序运行结果本例要求在“a.txt”文件末加写字符串,因此,在程序第6 行以追加读写文本文件的方式打开文件“a.txt”。

文件的读写|C语言程序设计基础教程|示例和程序运行结果

任务描述

文件是数据在外部介质上存储的信息,读文本文件是将文件中存储的数据输入计算机内存中,供程序运行时使用。

在C语言中,都是通过系统函数完成对文件的数据读取操作,这些系统函数包含在头文件“stdio.h”中,使用前需要在程序前面添加命令行:#include "stdio.h"。

知识学习

对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:

·字符读写函数:fgetc 和fputc

·字符串读写函数:fgets 和fputs

·数据块读写函数:freed 和fwrite

·格式化读写函数:fscanf 和fprinf

下面分别予以介绍。

(1)按字符读写的函数fgetc()、fputc()

字符读写函数是以字符(字节)为单位的读写函数,每次可从文件读出或向文件写入一个字符。

1)读字符函数fgetc

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

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

例如:

ch=fgetc(fp);

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

对于fgetc 函数的使用有以下几点说明:

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

b.读取字符的结果也可以不向字符变量赋值

例如:

fgetc(fp);

但是读出的字符不能保存。

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

例9.1 读入文件a.txt,并在屏幕上输出。

图9.1 例9.1 程序运行结果

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

2)写字符函数fputc

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

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

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

fputc('a',fp);

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

对于fputc 函数的使用也要说明几点:

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

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

c.fputc 函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF,可用此来判断写入是否成功。

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

程序运行结果如图9.2所示。

图9.2 程序运行结果

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

(2)按字符串读写函数fgets 和fputs

1)读字符串函数fgets

函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:

fgets(字符数组名,n,文件指针);

其中的n 是一个正整数,表示从文件中读出的字符串不超过n-1 个字符。在读入的最后一个字符后加上串结束标志'\0'。

例如:

fgets(str,n,fp);

其意义是从fp 所指的文件中读出n-1 个字符送入字符数组str 中。对fgets 函数有两点说明:

a.在读出n-1 个字符之前,如遇到了换行符或EOF,则读出结束。

b.fgets 函数也有返回值,其返回值是字符数组的首地址

例9.3 从a.txt 文件中读入一个含10 个字符的字符串。

(www.xing528.com)

程序运行结果如图9.3所示。

图9.3 程序运行结果

本例定义了一个字符数组str 共11 个字节,在以读文本文件方式打开文件“a.txt”后,从中读出10 个字符送入str 数组,在数组最后一个单元内将加上'\0',然后在屏幕上显示输出str数组。输出的十个字符正是例13.1 程序的前十个字符。

2)写字符串函数fputs

fputs 函数的功能是向指定的文件写入一个字符串,其调用形式为:

fputs(字符串,文件指针);

其中字符串可以是字符串常量,也可以是字符数组名,或指针变量,例如:

fputs("abcd",fp);

其意义是把字符串“abcd”写入fp 所指的文件之中。

例9.4 在例9.1 中建立的文件a.txt 中追加一个字符串。

程序运行结果如图9.4所示。

图9.4 程序运行结果

本例要求在“a.txt”文件末加写字符串,因此,在程序第6 行以追加读写文本文件的方式打开文件“a.txt”。然后输入字符串,并用fputs 函数把该字符串写入文件“a.txt”。在程序14行用rewind 函数把文件内部位置指针移到文件首。再进入循环逐个显示当前文件中的全部内容。

(3)按数据块读写函数fwrite 和fread

1)fwrite()函数

函数fwrite()的作用是将成批的数据块写入文件。它调用的一般形式为:

fwrite(写入文件的数据块的存放地址,一个数据块的字节数,

数据块的个数,文件型指针变量);

如果函数fwrite()操作成功,则返回值为实际写入文件的数据块的个数。

例如:已知一个struct student 类型的数组stu[20],则语句

fwrite(&stu[1],sizeof(struct student),1,fp);

是从结构体数组元素stu[1]存放的地址开始,以一个结构体struct student 类型变量所占字节数为一个数据块,共写入文件类型指针fp 指向的文件1 个数据块,即stu[1]的内容写入文件。

2)fread()函数

函数fread()的作用是从文件中读出成批的数据块。它调用的一般形式为:

同样,如果函数fread()操作成功,则返回值为实际从文件中读取数据块的个数。

例如:已知stu1 是一个结构体struct student 变量,则

fread(&stu1,sizeof(struct student),1,fp);

是从文件类型指针fp 指向的文件的当前位置开始,读取1 个数据块,该数据块为结构体struct student 类型变量所占字节数,然后将读取的内容放入变量stu1 中。

注意:fwrite()和fread()函数读写文件时,只有使用二进制方式,才可以读写任何类型的数据。最常用于读写数组和结构体类型数据。

例9.5 从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。

图9.5 例9.5 程序运行结果

(4)按格式化读写函数fprintf 和fscanf

函数fprintf()和fscanf()主要用于数据文件的读写,既可以使用ASCII 文件也可以使用二进制文件。

1)fprintf()函数

函数fprintf()的作用与printf()相似,只是输出对象不是标准输出设备而是文件,即按照格式要求将数据写入文件。它调用的一般形式为:

fprintf(文件型指针变量,格式控制,输出表列);

例如:

fprintf(fp,"%d,%s,%5.2f",num,name,score);

它的作用是将变量num、name、score 按照%d、%s、%5.2f 的格式写入fp 指向的文件的当前位置。

2)fscanf()函数

函数scanf()从通过标准输入设备读取数据,同样函数fscanf()按照格式要求从文件中读取数据。它调用的一般形式为:

fscanf(文件型指针变量,格式控制,输入表列);

例如:

fscanf(fp,"%d,%s,%5.2f",&num,&name,&score);

它的作用是从fp 指向的文件的当前位置开始,按照%d、%s、%5.2f 的格式取出数据,赋给变量num、name 和score。

例9.6 从键盘按格式输入数据存到磁盘文件中去。

图9.6 例9.6 程序运行结果

任务总结

文件可按只读、只写、读写、追加4 种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。文件可按字节、字符串、数据块为单位读写,文件也可按指定的格式进行读写。

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

我要反馈