《项目12文件.ppt》由会员分享,可在线阅读,更多相关《项目12文件.ppt(83页珍藏版)》请在三一文库上搜索。
1、项目12 文 件,12.1 文件概述 12.2 文件的打开与关闭 12.3 文件的读/写操作 12.4 位置指针与文件定位 12.5 本章小结 习题 实验题,在本书的第1章,我们已经在C语言编译系统环境下将源程序输入到了计算机里,然后把它们以文件的形式存储到了磁盘上。我们将这种记录在外部介质上的数据的集合称为“文件”。文件是C语言程序设计中的一个重要概念,在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据(包括运行结果)就被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。 本章介绍如何用C语言编译系统提
2、供的库函数实现对文件的打开、关闭及读/写等操作。,12.1 文 件 概 述 1文件的分类 文件可以从不同的角度进行分类: (1) 根据文件的内容来分,可分为源程序文件、目标文件、可执行文件和数据文件等。 (2) 根据文件的组织形式来分,可分为顺序存取文件和随机存取文件。,(3) 根据文件的存储形式来分,可分为ASCII码文件(又称文本文件)和二进制文件。ASCII码文件是每一个字节存储一个ASCII码(代表一个字符)。 二进制文件是把内存中的数据,原样输出到磁盘文件中。 有一个整数100,如果按二进制形式存储,两个字节就够用;如果按ASCII码形式存储,由于每位数字都占用一个字节,所以共需要三
3、字节空间,如图12-1所示。,图12-1 数值的存储形式示意图 (a) ASCII码存储形式;(b) 二进制存储形式,用ASCII码形式存储,一个字节存储一个字符,因而便于对字符进行逐个处理,但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)。 用二进制形式存储,可以节省存储空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。,2读文件与写文件 所谓读文件,是指将磁盘文件中的数据传送到计算机内存的操作;所谓写文件,是指从计算机内存向盘文件中传送数据的操作,如图12-2所示。,图12-2 读/写文件操作示意图,3文件类型 系统给每个打开的文件都在内存中开辟
4、一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义,取名为FILE(注意:“FILE”必须大写),并放在头文件中。 有了FILE类型之后,就可以定义一个指向FILE类型的指针变量,并通过该指针访问文件。文件类型指针的定义格式为 FILE *文件类型指针变量名; 例如: FILE *fp,*fp1,*fp2;,4缓冲文件系统(标准I/O) 所谓缓冲文件系统,是指系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。 从磁盘文件向内存读入数据时,首先将一批数据读入到文件缓冲区中,再从文件缓冲区将数据逐个送到程序数据区,如图12-3所示。
5、,图12-3 缓冲文件系统的输入示意图,从内存向磁盘输出数据时,则正好相反:必须先将一批数据输出到缓冲区中,待缓冲区装满后,再一起输出到磁盘文件中,如图12-4所示。,图12-4 缓冲文件系统的输出示意图,12.2 文件的打开与关闭 与其他高级语言一样,对文件进行操作之前,必须先打开文件;使用结束后,为避免数据丢失,应立即关闭该文件。 所谓打开文件,是指一个文件指针变量指向被打开文件的结构变量,以便通过指针变量访问打开文件。,所谓关闭文件,是指把(输出)缓冲区的数据输出到磁盘文件中,同时释放文件指针变量(即使文件指针变量不再指向该文件)。此后,不能再通过该指针变量来访问该文件,除非重新打开。
6、C语言规定了标准输入/输出函数库:用fopen()函数打开一个文件;用fclose()函数关闭一个文件。,12.2.1 文件的打开(fopen()函数) 1格式 打开文件的格式为 fopen(“文件名“,“打开方式“); 其中,文件名是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。打开方式如表12-1所示。如: FILE *fp; fp=fopen(“file1“, “r“); 表示以“只读”方式打开数据文件“file1”,并将其指针赋给指针变量fp。,表12-1 文件操作方式一览表,2功能 fopen()函数的功能是返回一个指向指定文件的指针。 3说明 (1)
7、如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定为0)。 常用下面的方法打开一个文件: if(p=fopen(“文件名“,“打开方式“)=NULL) printf(“can not open this filen“); exit(0); /*关闭打开的所有文件,程序结束运 行,返回操作系统*/ ,其中,exit()是一个函数,使用格式为 void exit(程序状态值); 作用是关闭已打开的所有文件,结束程序运行并返回操作系统,同时将“程序状态值”返回给操作系统。当“程序状态值”为0时,表示程序正常退出;为非0时,表示程序是出错后退出
8、。 (2) “r(b)+”与“a(b)+”的区别:使用前者打开文件时,读/写指针指向文件头;使用后者时,读/写指针指向文件尾。,(3) 使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。 使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,因而不再进行转换。 (4) 有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同。例如,有的系统只能用“r”、“w”和“a”方式;有的系统不用“r+”、“w+”和“a+”,而用“rw”、“wr”和“ar”表示。请注意所使用系统的规定。,(5) 在程序开始运行时
9、,系统自动打开三个标准文件,并分别定义了文件指针: 标准输入文件stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。 标准输出文件stdout:指向终端输出(一般为显示器)。 标准错误文件stderr:指向终端标准错误输出(一般为显示器)。,12.2.2 文件的关闭(fclose()函数) 在使用完一个文件后,为防止被误用或数据丢失,应该及时关闭。关闭文件的方法是: fclose(文件指针); 功能是关闭文件指针所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。例如: fclose(fp); 表示关闭fp所指向
10、的文件。,12.3 文件的读/写操作 文件打开之后,就可以对它进行读与写的操作了。 12.3.1 读/写文件中的一个字符fgetc()函数 和fputc()函数 1将一个字符写到文件中fputc()函数 【例12.1】将键盘上输入的一个字符串(以“”作为结束字符),以ASCII码形式存储到一个磁盘文件中。,/*程序功能:从键盘上输入一个字符串,将其存储到一 个磁盘文件中*/ #include “stdio.h“ main(int argc,char *argv) FILE *fp; char ch; if(argc!=2) /*参数个数不对*/ printf(“the number of ar
11、guments not correctnn“); printf(“Usage: 可执行文件名 filenamen“); exit(0); ,if (fp=fopen(argv1, “w“)=NULL) /*打开文件失败*/ printf(“can not open this filen“); exit(0); /*输入字符,并存储到指定文件中*/ for(; (ch=getchar()!= ; )fputc(ch,fp); /*输入字符并存储到文件中*/ fclose(fp): /*关闭文件*/ ,程序运行准备:在Options | Arguments 文本框中,输入文件名“temp.txt”
12、。注:只要符合文件命名规则,读者完全可以根据自己的习惯或爱好,给文件另外命名。 程序运行情况: abcdefg1234567,说明: 1) for语句的循环条件表达式 在for语句的循环条件表达式中,集成了对字符的输入(getchar()、赋值(ch=getchar()和判断(ch=getchar()!=),使得程序高度简洁。这正是C语言将赋值操作作为运算(可构成表达式)来处理的优越性!请读者自己体会。,2) fo语句循环体中的库函数fputc() (1) 用法: int fputc(字符数据,文件指针); 其中,字符数据既可以是字符常量,也可以是字符变量。 (2) 功能:将字符数据输出到文件
13、指针所指向的文件中去,同时将读/写位置指针向前移动一个字节(即指向下一个写入位置)。,如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为 1)。例如: fputc(ch,fp); 表示将ch中存储的字符输出到fp所指向的文件中。,2从文件中读入一个字符fgetc()函数和feof()函数 【例12.2】顺序显示【例12.1】创建的ASCII码文件。 /*程序功能:顺序显示一个磁盘ASCII码文件*/ /*参数:带参主函数;使用格式:可执行文件名 源文件 名*/ #include“stdio.h“ main(int argc,cha
14、r*argv) FILE *fp; char ch; if(argc!=2) /*参数个数不对*/,printf(“the number of arguments not correctn“); printf(“n Usage: 可执行文件名 source file“) exit(0); if (fp=fopen(argv1, “r“)=NULL) /*打开源文件失败*/ printf(“can not open source filen“);,exit(0); /*顺序输出文件的内容*/ for (; (ch=fgect(fp)!=EOF; ) putchar(ch); /*顺序读入并显示*
15、/ fclose(fp); /*关闭打开的文件*/ ,程序运行准备:在Options | Arguments 文本框中,输入文件名“temp.txt”。 程序运行情况: abcdefg1234567 说明: 1) 循环语句中的库函数fgetc() (1) 用法: int fgetc(文件指针);,(2) 功能:从文件指针所指向的文件中,读入一个字符,同时将读/写位置指针向前移动一个字节(即指向下一个字符)。该函数无出错返回值。 例如,fgetc(fp)表达式表示从文件fp中读一个字符,同时将fp的读/写位置指针向前移动到下一个字符。,2) 关于符号常量EOF 在对ASCII码文件执行读入操作时
16、,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。在本例中,通过判断读入的字符是否等于符号常量EOF,来决定循环是否继续。 在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到尾文件。关于库函数feof()的介绍,请参见【例12.3】的程序说明。,【例12.3】实现制作ASCII码文件副本的功能。 /*程序功能:制作ASCII码文件的副本*/ /*参数:带参主函数;使用格式:可执行文件名 源文件名 目标文件名*/ #include“stdio.h“ main(int argc,char *argv) FILE *input,
17、*output; /*input:源文件指针, output:目标文件指针*/ char ch; if(argc!=3) /*参数个数不对*/,printf (“the number of arguments not correctn“); printf(“n Usage可执行文件名 源文件名 目标文件名“); exit(0); if(fp=fopen(argv1, “r“)=NULL) /*打开源文件失败*/ printf(“can not open source filen“); exit(0); ,if(fp=fopen(argv2, “w“)=NULL /*创建目标文件失败*/ pri
18、ntf(“can not create destination filen“) exit(0); /*复制源文件到目标文件中*/ for( ; (!feof(input); )fputc(fgetc(input),output); fclose(input);fclose(output); /*关闭源文件和目标文件*/ ,程序运行准备:在Options | Arguments 文本框中,输入源文件名和目标文件名“temp.txt”,“temp2.txt”。 说明: 1) 循环条件表达式中的库函数feof() (1) 用法: int feof(文件指针),(2) 功能:在执行读文件操作时,如果遇
19、到文件尾,则函数返回逻辑真(1),否则,返回逻辑假(0)。feof()函数同时适用于ASCII码文件和二进制文件。 例如,!feof(input)表示源文件(用于输入)未结束,循环继续。 2) 循环体语句“fputc(fgetc(input),output);” 此语句表示从文件input中读一个字符(fgetc(input),然后输出到文件output中。,12.3.2 读/写一个字符串fgets()函数 和fputs()函数 【例12.4】将键盘上输入的一个长度不超过80的字符串,以ASCII码形式存储到一个磁盘文件中,然后再输出到屏幕上。 /*程序功能:从键盘上输入一个字符串,存储到一个
20、磁 盘文件中,并显示输出*/ /*参数:带参主函数;使用格式:可执行文件名 要创建 的磁盘文件名*/ #include“stdio.h“ main(int argc,char *argv),FILE *fp; /*文件类型名“FILE”,必须大写*/ char string81; /*字符数组用于暂存输入/输出的字符 串*/ if(argc2) /*参数太多,提示出错*/ printf(“Too many paramentersnn“); exit(0); ,if(argc=1) /*缺磁盘文件名,提示输入*/ printf(“Input the filename: “); gets(stri
21、ng); /*借用string数组暂存输入的文件名*/ argv1=(char *)malloc(strlen(string)+1); /*给文件名参数申请内存空间*/ strcpy(argv1,string); /*复制文件名到形参中*/ if (fp=fopen(argv1, “w“)=NULL) /*打开文件失败*/ printf(“can not open this filen“); exit(0), /*从键盘上输入字符串,并存储到指定文件中*/ printf(“Input a string: “);gets(string); /*从键盘上输入到字符串*/ fputs(string,
22、fp); /*存储到指定文件*/ fclose(fp); /*重新打开文件,读出其中的字符串,并输出到屏幕上*/ if(fp=fopen(argv1, “r“)=NULL) /*打开文件失败*/, printf(“can not open this filen“); exit(0); fgets(string,strlen(string)+1,fp); /*从文件中读出一个字符串*/ printf(“Output the string: “);puts(string); /*将字符串输出到屏幕上*/ fclose(fp); ,说明: 1) 基本思路 为增强程序的可靠性,程序中对参数过多的情况,
23、提示出错信息,并终止程序运行(当然,也可以取第一个参数作为文件名,忽略多余的;而遗漏文件名时,提示用户输入)。 同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。 一言以蔽之,程序设计的最高境界就是,一切为用户着想!请读者仔细体会。,2) 缺磁盘文件名时的键盘输入 if(argc=1) /*缺磁盘文件名,提示输入*/ printf(“Input the filename: “); gets(string); /*借用string数组暂存输入的文 件名*/ argv1=(char *)malloc(strlen(string)
24、+1); /*给文件名参数申请内存空间*/ strcpy(argc1,string); /*复制文件名到形参中*/ ,当遗漏文件名时,形参argv1是一个空指针,直接使用容易出问题,所以先借用string数组暂存输入的文件名,然后再用malloc()函数。按文件名实际长度,给形参argv1申请一块内存空间,最后将文件名复制到形参argv1中。 3)“fputs(str-in,fp);”语句中的库函数fputs()向指定文件输出一个字符串 (1) 用法: int fputs(字符串,文件指针); 其中,字符串可以是一个字符串常量,或字符数组名,或字符指针变量名。,(2) 功能:向指定文件输出一个
25、字符串,同时将读/写位置指针向前移动strlength(字符串长度)个字节。如果输出成功,则函数返回值为0;否则,为非0值。 “fputs(str-in,fp);”语句的功能是,将字符数组str-in中存储的字符串输出到fp所指向的文件中。,4)“fgets(str-out,strlen(str-in)+1,fp);”语句中的库函数fgets()从文件中读一个字符串 (1) 用法: char *fgets(字符数组/指针,字符串长度+1,文件指针); (2) 功能:从指定文件中读入一个字符串,存入字符数组/指针中,并在尾端自动加一个结束标志0;同时,将读/写位置指针向前移动strlength(
26、字符串长度)个字节。,如果在读入规定长度之前遇到文件尾EOF或换行符,读入结束。 5) fgets()、fputs()函数与gets()、puts()函数比较 这两对函数的功能相似,只是操作对象不同:fgets()和fputs()函数以指定文件为操作对象,而gets()和puts()函数却是以标准输入(stdio)/输出(stdout)文件为操作对象。,12.3.3 读/写一个数据块fread()函数 和fwrite()函数 fgetc()和fwrite()函数一次只能读/写一个字节数据,但实际应用中,却常常要求一次读/写一个数据块(连续的若干字节)。为此,ANSI C标准设置了fread()
27、和fwrite()函数。 一般用法是: int fread(void *buffer, int size, int count, FILE *fp); int fwrite(void *buffer, int size, int count, FILE *fp);,其功能为 fread()从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中。同时,将读/写位置指针向前移动size*count个字节。其中,buffer是存放读入数据的起始地址(即存放何处)。,fwrite()从buffer开始,一次输入size个字节,重复cou
28、nt次,并将输出的数据存放到fp所指向的文件中。同时,将读/写位置指针向前移动size*count个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。 如果调用fread()或fwrite()成功,则函数返回值等于count。 fread()和fwrite()函数一般用于二进制文件的处理。,12.3.4 对文件进行格式化读/写fscanf()函数 和fprintf()函数 fscanf()和fprintf()函数与scanf()和printf()函数的功能相似,它们都是格式化输入/输出函数。区别在于:fscanf()和fprintf()函数的操作对象是指定文件,而sc
29、anf()和printf()函数的操作对象是标准输入(stdin)/输出(stdout)文件。,fscanf()和fprintf()函数的用法如下: int fscanf(文件指针,“格式符“,输入变量首地址表); int fprintf(文件指针,“格式符“,输入参量表); 例如: int i=3; float f=9.80 fprintf(fp, “%2d,%6.2f“,i,f);,fprintf()函数的作用是,将变量i按%2d的格式,变量f按%6.2f的格式,以逗号作分隔符,输出到fp所指向的文件中:3,9.80。,12.3.5 读/写函数的选用原则 从功能角度来说,fscanf()函
30、数和fprintf()函数可以完成文件的任何数据读/写操作。但为方便起见,依下列原则选用: (1) 读/写一个字符(或字节)数据时:选用fgetc()函数和fputc()函数。 (2) 读/写一个字符串时:选用fgets()函数和fputs()函数。 (3) 读/写一个(或多个)不含格式的数据时:选用fread()函数和fwrite()函数。 (4) 读/写一个(或多个)含格式的数据时:选用fscanf()函数和fprintf()函数。,12.4 位置指针与文件定位 文件中有一个读/写位置指针,指向当前的读/写位置。如果顺序读/写一个文件,则每次读/写一个(或一组)数据后,系统自动将位置指针移
31、动到下一个读/写位置上。 如果用户想改变系统的这种读/写规律,强制性地移动到希望的位置上,可使用有关文件定位的函数。,12.4.1 位置指针复位函数rewind() 位置指针复位函数rewind()的用法如下: int rewind(文件指针); 其功能是:使文件的位置指针返回到文件头。,12.4.2 随机读/写与fseek()函数 对于流式文件,既可以顺序读/写,也可随机读/写,关键在于控制文件的位置指针。 所谓顺序读/写,是指读写完当前数据后,系统自动将文件的位置指针移动到下一个读/写位置上。 所谓随机读/写,是指读/写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何
32、一个地方。,fseek()函数的用法如下: int fseek(文件指针,位移量,参照点); 其功能是:将指定文件的位置指针,从参照点开始,移到指定的字节数处。 说明: (1) 参照点:用0(文件头)、1(当前位置)和2(文件尾)表示。 在ANSI C标准中,还规定了下面的名字: SEEK_SET文件头,SEEK_CUR当前位置,SEEK_END文件尾,(2) 位移量:以参照点为起点,向前(当前位置0时)或后(当位移量0时)移动的字节数。在ANSI C标准中,要求位移量为long int型数据。 fseek()函数一般用于二进制文件。具体应用请参阅13.1节。,12.4.3 返回文件当前位置的
33、函数ftell() 由于文件的位置指针可以任意移动,也经常移动,因而往往容易迷失当前位置,ftell()就可以解决这个问题。ftell()函数的用法如下: long ftell(文件指针); 其功能是:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。如果返回值为-1L,则表明调用出错。例如: offset=ftell(fp); if(offset= -1L)printf(“ftell() errorn“);,12.5 本 章 小 结 1文件是指存放在外部存储介质上的数据集合。为标识一个文件,每个文件都必须有一个文件名,其一般结构为 主文件名.扩展名 凡是需要长期保存的数据,都必须以文
34、件形式,保存到外部存储介质上(硬盘、软盘或磁带等)。,2在C语言中,根据文件的存储形式,将文件分为ASCII(阿斯柯依)码文件和二进制文件。ASCII码文件又称文本文件,它的每一个字节存储一个ASCII码值(代表一个字符): C语言中的文件是由一个一个的字符(或字节)组成的。对这种流式文件的存取操作,也是以字符(或字节)为单位进行的。 3通过系统定义的文件结构类型FILE(必须大写),可定义指向已打开文件的文件指针变量。通过这个文件指针变量,可实现对文件的读/写操作和其他操作。,4对文件进行操作之前,必须先用fopen()库函数打开该文件;使用结束后,应立即用fclose()库函数关闭,以免数
35、据丢失。函数用法如下: FILE*fopen(“文件名“,“操作方式“); int fclose(FILE,文件指针); 在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:标准输入文件stdin,标准输出文件stdout,标准错误文件stderr。,5读/写文件中的一个字符fgetc()函数和fputc()函数: int fputc(字符数据,文件指针); int fgetc(文件指针); 在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(-1)。在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到文件尾: int f
36、eof(文件指针); feof()库函数也适用于ASCII码文件。,6读/写文件中的一个字符串fgets()函数和fputs()函数: int fputs(字符串,文件指针); char *fgets(字符数组/指针,字符串长度+1,文件指针); fgets()、fputs()函数与gets()、puts()函数的功能相似,只是操作对象不同:fgets()和fputs()函数以指定文件为操作对象,而gets()和puts()函数却是以标准输入(stdin)/输出(stdout)文件为操作对象。,7读/写文件中的一个数据块fread()函数和fwrite()函数: int fread(void
37、*buffer,int size,int count,FILE *fp); int fwrite(void *buffer,int size,int count,FILE *fp); fread()和fwrite()函数一般用于二进制文件的处理。 8对文件进行格式化读/写fscanf()函数和fprintf()函数: int fscanf(文件指针,“格式符“,输入变量首地址表); int fprintf(文件指针,“格式符“,输出参量表);,与scanf()和printf()函数的功能相似,它们都是格式化输入/输出函数。区别在于:fscanf()和fprintf()函数的操作对象是指定文件,
38、而scanf()和printf()函数的操作对象是标准输入(stdin) /输出(stdout)文件。,9对于流式文件,也可随机读/写,关键在于通过调用fseek()或rewind()函数,将位置指针移动到需要的地方: int fseek(文件指针,位移量,参照点); int rewind(文件指针); 10返回文件位置指针的当前位置ftell()库函数 long ftell(文件指针);,11 在调用输入/输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测: int ferror(文件指针) 12将文件错误标志和文件结束标志置0 clearerr()库函数:
39、 void clearerr(文件指针);,习 题 1简答题 (1) 什么是文件? C语言的文件有什么特点? (2) 什么是文件指针? 为什么要打开和关闭文件? 2编程题 (1) 从键盘上输入一个字符串,要求将其中的大写字母转换成小写,然后把整个字符串存储到一个磁盘文件中(ASCII码形式)。,(2) 编写一个程序copyfile.c,实现两个磁盘文件的合并拷贝,并存储到一个新的目标文件中。如果缺省目标文件名,则将第二个文件追加到第一个文件之后。 (3) 某校数理化学习小组有5个人,每个人的信息包括:学号、姓名、数学成绩、物理成绩和化学成绩。要求从键盘上输入他们的信息,并求出每个人的平均成绩,
40、然后连同平均成绩存储到一个磁盘文件中。 (4) 在上题的数据文件中,输出平均成绩最高者的全部信息。,实 验 题 1实验目的 (1) 理解文件和文件指针的概念。 (2) 掌握文件的定义、打开、关闭以及顺序读/写的方法。 2实验内容 程序(一) 利用文本文件的方法设计并运行如下程序,以顺序访问方式建立和读取该文件,用户输入任意10人的学习成绩,通过运行此程序理解文件这一数据类型与其他数据类型的区别。,参考程序: #include #include #include main() FILE *rf; int x,i; clrscr();,if(rf=fopen(“stud.dat“,“w“)=NUL
41、L) printf(“cannot open filen“); return; for (i=0;i10;i+) printf(“x=?“); scanf(“%d“, ,程序(二) 有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学生号、姓名、3门课成绩),计算出平均成绩,将原有的数据和计算出的平均分存入磁盘文件“stud”中。 程序(三) 以下程序实现从键盘读入字符串并将小写字母转化为大写字母存入文件,再从文件读回显示的功能,输入的字符串以“!”结束,请完善程序。,参考程序: #include main() FILE *fp; char str100; int i=0; if(fp=fopen(“test“,“w“)=NULL) printf(“can not open the filen“); exit(0); ,printf(“input a string:n“); gets(str); while(stri!= !) if(stri=a, fclose(fp); _; fgets(str,_,fp); printf(“%sn“,str); fclose(fp); ,3实验分析与总结 通过对文件的定义、打开、关闭以及顺序读/写方法的分析与实践,总结文件数据类型的读/写方法与其他数据类型操作方法的区别。,
链接地址:https://www.31doc.com/p-3376806.html