




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 文件 本章概述 本章的学习目标主要内容1本章概述文件操作是C语言程序设计中的重要组成部分。很多应用问题中会用到文件操作。本章讨论C语言程序设计中的文件操作。包括文件的打开与关闭、文件的定位与检测、文件的读写所使用的各种函数和编程方法。2本章的学习目标本章教学目的:理解文件的概念,掌握用来进行文件的打开、关闭、定位、检测、读写操作的方法。本章教学重点:文件的读写本章教学难点:文件的定位与检测3主要内容12.1 文件概述 12.2 文件的打开与关闭 12.3 文件的定位和检测 12.4 文件的读写 12.5 程序设计举例 412.1 文件概述 12.1.1 文件文件是程序设计中的一个重要
2、概念,所谓“文件”是指存储在外部介质(如磁盘)上的一组相关数据的集合,为了便于定位这组数据,通常要为它取一个名称,即文件名。操作系统就是以文件为单位对数据进行管理的,如果想找存储在外部介质上的数据,必须按文件名找到存放该数据的文件,然后再从文件中读取数据。从用户的角度来看,文件可以分普通文件和设备文件。普通文件是驻留在外部介质上的有序数据集,它可以是源文件、目标文件、可执行程序,也可是一组待输入的原始数据,或者是一组输出结果。前者通常称为程序文件,后者则可称为数据文件。设备文件是指与主机相联的各种外部设备,如显示器、键盘等,对于操作系统而言,每一个与主机相联的输入/输出设备都是一个文件,其输入
3、输出等同于文件的读和写。例如,通常将显示器定义为标准输出文件,将键盘定义为标准输入文件。我们前面使用的printf()、putchar()等C函数就是输出到标准输出文件(即显示器),scanf()、getchar()等C函数就是从标准输入文件(即键盘)输入数据。 512.1 文件概述 12.1.2 数据文件的存储形式从文件的编码方式来看,文件可以分为ASCII码文件和二进制文件两种。ASCII码文件也称为文本文件,这种文件在磁盘中存储时每个字符对应一个字节,存放的是该字符的ASCII码值。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。ASCII码文件内容可以在屏幕上按字
4、符显示,例如C源程序文件就是ASCII文件,在windows中可以直接用记事本打开阅读。由于ASCII码文件是按字符显示,因此能读懂其内容,而二进制文件虽然有时也能显示在屏幕上,但其内容却无法直接读懂。6图12.1中,00110001、00110010、00110011、00110100分别是字符1、2、3、4的ASCII码值的二进制形式。例如,数字1234的几种存储形式如图12.1所示: 7存储内容用ASCII码形式输出时,其字节与字符一一对应,一个字节代表一个字符,便于对字符进行逐个处理,也便于输出字符,但一般占用的存储空间较多,而且要花费转换时间。用二进制形式输出,可以节省外存空间和转换
5、时间,但一个字节与字符无一一对应关系,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上,常用二进制文件保存。因为C文件是一串字节流或二进制流,所以C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,即在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔。我们把这种文件称作“流式文件”。C语言允许对文件存取一个字符,有很强的灵活性。812.1.3 标准文件与非标准文件在老版本的C(如Unix下的C)中对文件的处理方式有两种:一种是缓冲文件系统又称标准文件系统,另一
6、种是非缓冲文件系统又称非标准文件系统。9所谓“缓冲文件系统”是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据时必须先送到内存中的缓冲区,缓冲区装满数据后,再一起送到磁盘中去。同样,从磁盘向内存中读入数据时,则一次从磁盘文件中将一批数据读入到缓冲区,然后再从缓冲区逐个地将数据送到程序数据区(给程序中的变量),如图12.2所示。缓冲区的大小随C的版本不同而不同,一般为512字节。10所谓“非缓冲文件系统”是指系统不会自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。C语言中没有专门的输入输出语句,对文件的读写都是用库函数来实现的,ANSI规定了输入输出函数,用
7、它们对文件进行读写。本章只介绍ANSI C规定的缓冲文件系统,即标准文件系统。 1112.1.4 文件类型指针 在缓冲文件系统中有一个关键概念是“文件类型指针”,每一个存在的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件的名称、文件状态、文件当前位置等),这些信息保存在一个结构体变量中,该结构体由系统声明,取名为FILE。 Turbo C在stdio.h文件中有以下的类型声明:typedef struct short level; /*缓冲区“满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned cha
8、r hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer; /*数据缓冲区的位置*/ unsigned char *curp; /*指针,当前的指向*/ unsigned istemp; /*临时文件,指示器*/ short token; /*用于有效性检查*/FILE; 1212.1.4 文件类型指针 定义文件类型指针变量的格式为: FILE *指针变量标识符;例如: FILE *fp; 上面的定义表示fp是指向文件类型的指针变量。 文件被打开时,系统自动为该文件定义一个FILE类型变量,使该文件与对应的FILE
9、类型变量建立联系。因为fp是指向FILE类型的指针变量,通过fp即可找到存放该文件信息的FILE类型变量,然后按变量提供的信息找到该文件,对该文件实施操作。 习惯上笼统地把fp称为文件类型指针。所谓打开文件就是指建立文件的各种有关信息,并使FILE类型指针指向该文件,以便对文件进行操作。关闭文件则断开FILE类型指针与该文件间的联系,也就禁止对该文件进行操作。1312.2 文件的打开与关闭 12.2.1 打开文件的函数( fopen) 函数fopen用来打开文件,函数fopen的使用格式如下: FILE *fp ; fp = fopen(文件名,文件使用方式) 例如:fp=fopen(“d:e
10、xerciseuser.txt”, “r”); 表示要打开的文件名为user.txt,文件在d:exercise目录下,使用文件的方式为“只读”(r代表读)。fopen函数带回指向user.txt文件的指针并赋给fp,这样fp就指向user.txt文件。 由上面例子可以看出,在打开一个文件时,通知编译系统以下信息: 需要打开的文件标识,也就是文件的位置及文件名; 使用文件的方式(是“读”还是“写”等); 让哪一个指针指向被打开的文件。14表12-1 文件的使用方式字符含 义r以只读方式打开一个文本文件。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件首部的第一个字符。w以只写方式
11、打开一个文本文件。若文件不存在,则建立该文件。若文件已存在,则删除原文件内容,写入新内容。a以追加方式打开一个文本文件。只能向文件尾追加数据。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。rb以只读方式打开一个二进制文件。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件首部的第一个字节。wb以只写方式打开一个二进制文件。若文件不存在,则建立该文件。若文件已存在,则删除原文件内容,写入新内容。ab以追加方式打开一个二进制文件。只能向文件尾追加数据。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。15表12-1 文件的使用方式字符含 义r+以读/
12、写方式打开一个文本文件。文件必须存在。打开后,文件内部的位置指针指向文件首部的第一个字符。打开后,可以读取文本内容,也可以写入文本内容,也可以既读又写。w+以读/写方式打开或新建立一个文本文件。若文件已存在,则新的写操作将覆盖原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,再读取文件内容。a+以读和追加的方式打开一个文本文件。允许读或追加。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将位置指针移到某个位置,读取文件内容。rb+以读/写方式打开二进制文件。文件必须存在。打开后,文件内部的位置指针指向文件首部的第一个字节。打开后
13、,可以读取数据,也可以写入数据,也可以既读又写。wb+以读/写方式打开或新建立一个二进制文件。若文件已存在,则新的写操作将覆盖原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,再读取文件内容。ab+以读和追加的方式打开一个二进制文件。允许读或追加。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将位置指针移到某个位置,读取数据。1612.2 文件的打开与关闭 如果成功打开一个文件,则fopen()函数将返回一个指向该文件的指针,否则将返回空指针(NULL),由此可以判断一个文件是否成功打开。1712.2 文件的打开与关闭 12.2
14、.2 关闭文件的函数fclose fclose函数用来关闭一个文件,其使用格式如下: fclose(文件类型指针); 例如: fclose(fp); 用fclose函数关闭一个由fopen函数打开的文件,当文件关闭成功时返回0,否则返回EOF。EOF是在stdio.h中定义的符号常量,值为-1。可以根据该函数返回的值判断文件是否正常关闭。1812.2 文件的打开与关闭 例12.1 打开与关闭文件示例。#include int main()FILE *fp; int i; fp=fopen(“cj.dat”, “rb”); if(fp=NULL) printf(“File open failed
15、!n”); else printf(“File open successful!n”); i=fclose(fp); if (i=0) printf(“File close successful!n”); else printf(“File close failed!n”); return 0; 1912.3 文件的定位和检测 12.3.1 文件的顺序读写和随机读写对文件的读写方式有两种:顺序读写和随机读写,也称为顺序存取和随机存取。顺序读写的特点是:从文件开始到文件结尾,一个字节一个字节地顺序读写,读写完第一个字节,才能顺序读写第二个字节,读写完第二个字节,才能顺序读写第三个字节,依次类推。
16、随机读写的特点是:允许从文件的任何位置开始读写,利用后面介绍的fseek和rewind函数,可以使文件内部的位置指针指向某一个位置,从该位置开始读写。用程序来控制文件内部的位置指针的移动,称为文件的定位。对于存储在磁盘上的文件,既可以采用顺序读写方式,也可以采用随机读写方式。2012.3 文件的定位和检测 12.3.2 rewind函数和fseek函数 1rewind函数 rewind函数的使用格式: rewind(文件类型指针); 例如: rewind(fp); rewind函数的功能是把文件内部的位置指针重新定位到文件的开头,此函数无返回值。 注意:刚打开文件时,文件内部的位置指针是定位在
17、文件的开头,即文件首。2112.3 文件的定位和检测 12.3.2 rewind函数和fseek函数 2fseek函数fseek函数的使用格式如下: fseek(文件类型指针,位移量,起始点);fseek函数的功能是移动文件内部的位置指针到规定的位置。 2212.3 文件的定位和检测 fseek函数的第一个参数是“文件类型指针”,指明了要操作是哪一个文件。第二个参数是“位移量”,指明了从“起始点”开始移动的字节数,位移量必须是长整型数据,加后缀“L”;若位移量是正整数,表示文件内部的位置指针向文件尾方向移动,若位移量是负整数,表示文件内部的位置指针向文件首方向移动。第三个参数是“起始点”,指明
18、了移动时的起始位置,起始点有三种取值,分别代表文件首、文件尾和当前位置,如表12-2所示。 表12-2 fseek函数的起始点符号常量数值含义SEEK_SET0从文件首开始移动SEEK_CUR1从文件的当前位置开始移动SEEK_END2从文件尾开始移动23例如:fseek(fp,100L,SEEK_SET); 或fseek(fp,100L, 0); 将文件内部的位置指针从文件首开始向文件尾方向移动100个字节。fseek(fp,20L,SEEK_CUR); 或fseek(fp,20L,1); 将文件内部的位置指针从当前位置向文件尾方向移动20个字节。fseek(fp,-30L,SEEK_CUR
19、); 或fseek(fp,-30L,1); 将文件内部的位置指针从当前位置向文件首方向移动30个字节。fseek(fp,-10L,SEEK_END); 或fseek(fp,-10L,2); 将文件内部的位置指针从文件尾开始向文件首方向移动10个字节。2412.3 文件的定位和检测 12.3.3 feof函数和ftell函数 1feof函数 feof函数的使用格式如下: feof(文件类型指针); feof函数是用来检测文件位置指针是否到达文件尾,若到达文件尾则返回一个非0值(真),否则返回0(假)。当我们对文件操作时,例如顺序读取文件的所有数据,可以使用这个函数来判断文件内容是否结束,若文件内
20、容没有结束,则继续读取数据,否则结束读取操作。 下面的循环语句是使用feof函数判断fp所指向的文本文件内容是否结束,若文件内容没有结束,则使用fgetc函数继续读取数据。fgetc将在后面介绍。While (!feof(fp) putchar(fgetc(fp); 2512.3 文件的定位和检测 12.3.3 feof函数和ftell函数 2ftell函数 ftell函数的使用格式如下: 长整型变量=ftell(文件类型指针); ftell函数是用来检测文件内部的位置指针的当前位置,若调用成功,ftell函数返回值是:从文件开头到位置指针所指当前位置的总的字节数(长整型),否则返回值是-1L
21、。2612.3 文件的定位和检测 12.3.4 ferror函数和clearerr函数 1ferror函数 ferror函数的使用格式如下: ferror(文件指针); ferror函数的功能是检查文件在用各种输入输出函数进行读写时是否出错。若ferror返回值为0表示未出错,否则表示有错。执行fopen函数时,ferror函数的初始值自动置为0。 2712.3 文件的定位和检测 12.3.4 ferror函数和clearerr函数 2clearerr函数 clearerr函数的使用格式如下: clearerr(文件指针); clearerr函数的功能是将文件的错误标志和文件结束标志设置为0。
22、若文件发生了输入输出错误,其错误标志被置为非0,该值会一直保持到再一次调用输入输出函数或者使用clearerr函数才会改变。文件刚打开时,错误标志为0。2812.4 文件的读写 12.4.1 fgetc函数和fputc函数 1fgetc函数 fgetc函数的使用格式如下: fgetc(文件类型指针); fgetc函数的功能是从文件类型指针指向的文本文件的当前位置读取一个字符,该字符的ASCII码值作为函数的返回值,若读到文件结束符(z)或读取不成功,则返回EOF(-1)。从文件读取一个字符后,文件的当前位置将后移一个字节。 2912.4.1 fgetc函数和fputc函数例如:FILE *fp
23、 ; char ch; fp=fopen(“d:yw.txt”,“r”); ch=fgetc(fp);表示从fp所指向的文件的当前位置读取一个字符,赋给字符型变量ch。getchar()与fgetc(stdin)功能相同,这里的stdin代表标准输入文件(如键盘)。这两种形式的作用都是从终端(如键盘)输入一个字符,函数值就是该字符。3012.4.1 fgetc函数和fputc函数2fputc函数 fputc函数的使用格式如下: fputc(字符表达式,文件类型指针); fputc函数的功能是向文件类型指针指向的文本文件的当前位置写入一个字符,“字符表达式”代表要写入的字符,字符表达式可以是字符
24、常量或字符变量。若写入成功,则函数的返回值是所写入字符的ASCII码值,否则返回值为EOF(-1)。向文件写入一个字符后,文件的当前位置将后移一个字节。3112.4.1 fgetc函数和fputc函数例如:FILE *fp ; char ch=A; fp=fopen(“d:yw.txt”,“w”); fpuc(ch , fp); 表示将存储在变量ch中的字符A写入fp所指向的文件的当前位置。 putchar(ch)与fputc(ch, stdout)功能相同,这里的stdout代表标准输出文件(如显示器)。这两种形式的作用都是向终端(如显示器)输出一个字符。32例12.2 从键盘输入若干个字符
25、,将其中的小写英文字母写入d盘根目录下名为“yw.txt”文本文件中,将其它字符显示在屏幕上,若输入字符#,则程序结束。 #include int main( ) FILE *fp ; char ch; if (fp=fopen(“d:yw.txt”,“w”)=NULL) printf(“cannot open file!n”); exit(0); ch=getchar( ); while(ch !=#) if (ch=a & ch=a & ch=A & ch=Z) fputc( ch , fp2 ); fclose(fp1); fclose(fp2); return 0; 3412.4 文件
26、的读写 12.4.2 fread函数和fwrite函数 1fread函数 fread函数的使用格式如下: fread(buffer, size, count, fp); 其中:buffer是存放数据的存储空间的起始地址;size是数据块的大小(字节数);count是读多少个块;fp是文件类型指针。fread函数的功能是:从fp所指向的文件中读取数据块,读取的字节数为size*count,读取来的数据存放在buffer为起始地址的内存中。若fread函数的返回值等于count,则执行本函数读取数据成功;若文件结束或发生错误,返回值等于0。 例如,若已知有“int a10;”,则下面语句: fre
27、ad(a, sizeof(int), 10, fp);从fp所指向的文件中读取2*10个字节(即10个整数)存放于数组a中。3512.4.2 fread函数和fwrite函数2fwrite函数fwrite函数的使用格式如下: fwrite(buffer, size, count, fp); 其中四个参数的含义与fread函数基本相同,只不过现在是将内存中从buffer地址开始的数据往fp所指向的文件里写。 fwrite函数的的功能是:将内存中从buffer地址开始的数据往fp所指向的文件里写,写入到文件里的字节数为size*count。 例如,下面语句: int b6=1,3,5,7,9,11
28、; fwrite(b, sizeof(int), 6, fp); 将内存中b数组的6个元素值(2*6个字节)写入fp所指向的文件里。36int main() FILE *fp; int i; if (fp=fopen(d:xs.dat, wb)=NULL) printf(Cant open file!); exit(0); for (i=0; iSIZE; i+) /*从键盘输入学生数据*/ printf(Input date of No.%d student:n, i+1); printf(num: ); scanf(%d,&stui.num); printf(name: ); getcha
29、r(); /* 用getchar()来抵消前面的回车符*/ gets(); printf(age: ); scanf(%d,&stui.age); for (i=0;iSIZE;i+) /*向文件写入学生数据*/ if (fwrite(&stui, sizeof(struct student), 1, fp)!=1) printf(File write error!); fclose(fp); return 0;例12.4 从键盘上输入10名学生的学号,姓名,年龄,将这些数据写入d:xs.dat文件中。37例12.5 从上题的d:xs.dat文件中读出所有学生信息,显示在屏幕
30、上。#include #define SIZE 10struct student int num; char name8; int age; stuSIZE;38例12.5 从上题的d:xs.dat文件中读出所有学生信息,显示在屏幕上。#include #define SIZE 10struct student int num; char name8; int age; stuSIZE;int main() FILE *fp; int i; if(fp=fopen(d:xs.dat,rb)=NULL) printf(Cant open file!); exit(0); for(i=0;iSIZ
31、E;i+) if (fread(&stui, sizeof(struct student), 1, fp)!=1) printf(File read error!); else printf(%d, %s , %d n, stui.num, , stui.age); fclose(fp); return 0;3912.4.3 fscanf函数和fprintf函数1fscanf函数fscanf函数的使用格式如下: fscanf(文件类型指针,格式字符串,输入项地址表列); fscanf函数的功能是:按“格式字符串”所指定的格式,从“文件类型指针”所指向的文件的当前位置读取数据,
32、然后按“输入项地址表列”的顺序,将读取来的数据存入指定的内存单元中。fscanf函数的返回值是读取的数据个数;若遇见文件结束符或读取不成功,则fscanf函数返回EOF(-1)。 4012.4.3 fscanf函数和fprintf函数例如: fscanf(fp,“%d,%f”,&i,&t);表示从fp所指向的文件中,按“%d,%f”规定的格式读取两个值,将这两个值分别存储在地址&i和&t对应的内存单元中。若读取成功,fscanf函数的返回值是2。 前面几章经常使用的函数: scanf(格式字符串,输入项地址表列) ;与 fscanf(stdin,格式字符串,输入项地址表列) ;功能相同,这里的
33、stdin代表标准输入文件(如键盘)。这两种形式的作用都是从终端(如键盘),按“格式字符串”的格式输入(读取)数据,将输入(读取)的数据存入“输入项地址表列”指定的内存单元中。1fscanf函数4112.4.3 fscanf函数和fprintf函数 2fprintf函数fprintf函数的使用格式如下: fprintf(文件类型指针,格式字符串,输出项表列); fprintf函数的功能是:按“格式字符串”所指定的格式,将“输出项表列”中指定的各项的值写入“文件类型指针”所指向的文件的当前位置。若写入成功,fprintf函数的返回值是写入文件中的字符个数(或字节个数),否则返回EOF(-1)。4
34、2例如: fprintf(fp,“%d,%f”, i,t);表示按“%d,%f”规定的格式,在fp所指向的文件中,从文件的当前位置开始,将i和t的值写入文件中。 前面几章经常使用的函数: printf(格式字符串,输出项表列) ;与 fprintf(stdout,格式字符串,输出项表列) ;功能相同,这里的stdout代表标准输出文件(如显示器)。这两种形式的作用都是向终端(如显示器)按“格式字符串”的格式输出(写入)数据。12.4.3 fscanf函数和fprintf函数 2fprintf函数43例12.6 将一个学生姓名以及三门课的成绩写入新建立的文件user.txt中,该文件放在C盘根目
35、录下的dat目录中,然后再将这个学生姓名以及三个成绩值读取出来,求出它们的平均值,显示在屏幕上。#include int main() FILE *fp; int a1=82, a2=81, a3=83, b1, b2, b3; char name120=”ZhangHua”, name220; float aver; fp=fopen(c:datuser.txt, w+); fprintf(fp, %s , %d , %d , %d , name1 , a1, a2, a3); rewind(fp); fscanf(fp, %s , %d ,%d , %d , name2 , &b1, &b
36、2, &b3); aver=(b1+b2+b3)/3.0; printf(%s , %d , %d , %d , %f n , name2, b1, b2, b3,aver); fclose(fp); return 0;4412.4 文件的读写 1fgets函数 fgets函数的使用格式如下: fgets(pstr,n,fp); pstr是存放字符串的内存首地址,可以是数组名或指针变量名。整型变量n是限定读取的字符个数。fp是文件类型指针。 fgets函数的功能是:从fp所指向的文件的当前位置开始读取n-1个字符,然后在所有字符的后面加一个字符串结束标志0,将这个字符串存于pstr为首地址的内
37、存地址中。可能读取的字符数不足n-1个,因为规定在读完n-1个字符之前,若遇见换行符或文件结束(EOF),则结束读取。正常情况下,函数返回值是存放字符串的内存首地址(pstr);若一个字符也没有读入或有错误发生,函数返回值是NULL。12.4.4 fgets函数和fputs函数45例如: char str10; fgets(str,10,fp);表示从fp所指向的文件中读取9个字符,在9个字符的后面加一个字符串结束标志0,存入数组str中。12.4 文件的读写 12.4.4 fgets函数和fputs函数1fgets函数4612.4 文件的读写 12.4.4 fgets函数和fputs函数 2
38、fputs函数 fputs函数的使用格式如下: fputs(pstr,fp); pstr代表字符串,可以是字符串常量、字符串数组名或指向字符串的指针变量名。fp是文件类型指针。 fputs函数的功能是将字符串写入文件类型指针所指向的文件中去,不包括字符串结束标志0。 47例如: fputs(“We love peace!”,fp);表示将字符串“We love peace!”写入fp所指向的文件中(不包括0)。 char str=“character string”; (或char *str=“character string”;) fputs(str,fp);表示将str对应的字符串写入fp
39、所指向的文件中(不包括0)。12.4.4 fgets函数和fputs函数 2fputs函数48例12.7 将字符串“I love china!”(各单词间只有一个空格)写入c:zg.txt文件中,然后将其中的“love china!”读取出来,显示在屏幕上。#include int main() FILE *fp; char a30; fp=fopen(c:zg.txt,w+); fputs(I love china!, fp); fseek(fp, 2L, SEEK_SET); fgets(a, 12, fp); printf(%sn, a); fclose(fp); return 0;49
40、12.5 程序设计举例 例12.8 编程实现:(1)将若干名学生的学号、姓名、数学成绩、英语成绩、语文成绩存储在c:student.txt文件中。(2)根据给定的学号,在文件student.txt中查找并显示与该学号对应的学生的姓名、数学成绩、英语成绩、语文成绩的值。(3)在文件student.txt所有内容的后面,追加若干个学生的信息(每个学生包括学号、姓名、数学成绩、英语成绩、语文成绩5个数据)。(4)计算并显示每个学生的数学成绩、英语成绩、语文成绩的平均分。50程序如下: # include struct student int num; char name8; int math; in
41、t engl; int chin; ;51 void sto( ) FILE *fp; int yn=1 ; struct student stu; /*stu存放一个学生的项数据*/ if (fp=fopen(c:student, w)=NULL) printf (Cant open file!); return; while (yn=1) printf(请按顺序输入学生的学号,数学成绩,英语成绩,语文成绩,姓名:n); scanf(%d,%d,%d,%d,%s, &stu.num,&stu.math,&stu.engl,&stu.chin,); fwrite(&stu, s
42、izeof(struct student), 1, fp) ; printf(若停止输入请按0,若继续输入请按1,然后按回车.n); scanf(%d,&yn); fclose(fp); return; 52 void sea( ) FILE *fp; int bz=0, k=0,xh; struct student a; if (fp=fopen(c:student,r)=NULL) printf(Cant open file!); return; printf( 请输入学生的学号:); scanf(%d, &xh); fseek(fp, k*sizeof(struct student), SEEK_SET); while(!feof(fp) fread(&a, sizeof(struct student), 1, fp); if (xh=a.num) printf(查找成功!学生信息显示如下:n); printf(n%d,%s,%d,%d,%dn,a.num,,a.math,a.en
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一销售活动方案
- 六味斋营销活动方案
- 六年级毕业旅行活动方案
- 医疗文书考试试题及答案
- 安全生产法律法规试题及答案
- 安全人员考试题库及答案
- 六月新用户专享活动方案
- 共享亚运盛典活动方案
- 共享文明实践活动方案
- 共创团队活动方案
- GB/T 320-2006工业用合成盐酸
- GB/T 13912-2002金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- 湖南省永州市江华瑶族自治县事业单位招聘历年真题汇总【2012年-2022年整理版】(二)
- GB 19079.1-2013体育场所开放条件与技术要求第1部分:游泳场所
- 刑事证据制度课件
- 双减作业分层设计-六年级下册语文分层作业优秀设计案例01《北京的春节》(含参考答案)
- 北师大版八年级上册数学第一章练习题
- 河北省专业技术职务任职资格评审表
- 企业标准化体系建立课件
- 浦发银行个人信用报告异议申请表
- 医院护士辞职申请书集合六篇(护士岗位辞职申请书)
评论
0/150
提交评论