第18讲 文件 循环“圣经” 只要重复做一件事,就要用循环语句,此时考虑循环从哪儿开 始,满足什么条件继续循环,每次重复的是什么? 函数“圣经”: 函数调用,其实就是任务交接,此时,应指定任务交接给谁函 数名),要告知他哪些信息(实参)才能完成任务?而在调用之前, 你必须有一个函数能够完成你所移交的任务,即要先有函数定 义,定义时想象自己是完成任务的那个人,而完成这个任务需 要知道什么信息(形参),完成以后是否有结果(返回值)。 指针“圣经”:定义指针的根本目的就是根据指针找到数据。 指针p指向哪儿?间接引用的数据(p)是多少? 是指针指向发生了变化(P=?),还是间接引用的数据发生了变 化(p)=?
第18讲 文件 •循环“圣经” : •只要重复做一件事,就要用循环语句,此时考虑循环从哪儿开 始,满足什么条件继续循环,每次重复的是什么? •函数“圣经” : •函数调用,其实就是任务交接,此时,应指定任务交接给谁(函 数名),要告知他哪些信息(实参)才能完成任务?而在调用之前, 你必须有一个函数能够完成你所移交的任务,即要先有函数定 义,定义时想象自己是完成任务的那个人,而完成这个任务需 要知道什么信息(形参),完成以后是否有结果(返回值)。 •指针“圣经”:定义指针的根本目的就是根据指针找到数据。 •指针p指向哪儿?间接引用的数据(*p)是多少? •是指针指向发生了变化(p=?),还是间接引用的数据发生了变 化(*p)=?
文件系统 缓冲型文件系统: 系统自动在内存中为每个文件开辟一个缓冲区 作为程序和磁盘文件数据交流的中间媒介 变量2、文件缓冲区 (内存)读(内在 1、打开文件文件 (写入缓冲区)磁盘) 写 3、关闭文件 (写入磁盘) 三步中的每一步都是通过C语言 的库函数实现 2
2 文件系统 ▪ 缓冲型文件系统: ▪ 系统自动在内存中为每个文件开辟一个缓冲区, 作为程序和磁盘文件数据交流的中间媒介. 3、关闭文件 (写入磁盘) 变量 (内存) 2、 读 写 文件 (磁盘) 1、打开文件 (写入缓冲区) 文件缓冲区 (内存) •三步中的每一步都是通过C语言 的库函数实现
与文件输入输出相关的库函数 include <stdio.h> 打开: fopen 读/写 法宝:每个库函数在调用时可以查 TC: CTRL+F1 VC输入函数名即可看到函数形参。 文件定J针 rewind: fseeko: ftello: feofo 关闭: fclose
3 与文件输入输出相关的库函数 ▪ #include <stdio.h> ▪ 打开:fopen(); ▪ 读/写: ▪ fgetc(); fputc(); ▪ fgets(); fputs(); ▪ fread(); fwrite(); ▪ fscanf(); fprintf(); ▪ 文件定位指针 ▪ rewind(); fseek(); ftell();feof(); ▪ 关闭:fclose(); •法宝:每个库函数在调用时可以查询。 •TC:CTRL+F1 •VC 输入函数名即可看到函数形参
要解决的问题1: 将学生信息存入文件,再从文件调入数组 #include <stdio .h> *define n 30 struct sfu [char name[10]: int num Int age; char addr[15]:
4 要解决的问题1: 将学生信息存入文件,再从文件调入数组 #include<stdio.h> #define N 30 struct stu {char name[10]; int num; int age; char addr[15]; };
1、输入学生信息存入数组 void maino FLLE类型是在 stdio.h文件中定义的 struct stu bo ty pede structi FILE fP int level: /缓冲区‘满’或‘空’的程度* unsigned flags /*文件状态标志* int i char fd; /*文件描述符 printf(" ninpy unsigned char hold;如无缓冲区不读字符 for(i=0, Pp= short bsize: /*缓冲区的大小 unsigned char *buffer;/数据缓冲区的位置* scanf( unsigned char *curp;/文件定位指针 >ge,pp-> a unsigned istemp;/临时文件指示器 short token; /*用于有效性检查* FILE:
5 1、输入学生信息存入数组 void main() {struct stu boya[N],boyb[N],*pp,*qq; FILE *fp; /*定义一个用于指向FILE类型的指针fp*/ int i; printf("\ninput data\n"); for(i=0,pp=boya;i<N;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp- >age,pp->addr); FILE类型是在stdio.h文件中定义的。 typedef struct{ int level; /*缓冲区‘满’或‘空’的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer;/*数据缓冲区的位置*/ unsigned char *curp; /*文件定位指针*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ } FILE;