文件

函数调用形式               说明
fopen("路径","打开方式")           打开文件
fclose(FILE*)                  防止之后被误用
fgetc(FILE*)                  从文件中读取一个字符
fputc(ch,FILE*)                把ch代表的字符写入这个文件里
fgets(FILE*)                  从文件中读取一行
fputs(FILE*)                  把一行写入文件中
fprintf(FILE*,"格式字符串",输出表列)    把数据写入文件
fscanf(FILE*,"格式字符串",输入表列)    从文件中读取
fwrite(地址,sizeof(),n,FILE*)    把地址中n个sizeof大的数据写入文件里
fread(地址,sizeof(),n,FILE*)    把文件中n个sizeof大的数据读到地址里
rewind(FILE*)                             把文件指针拨回到文件头
fseek(FILE*,x,0/1/2)         移动文件指针。第二个参数是位移量,0代表从头移,1代表从当前位置移,2代表从文件尾移。
feof(FILE*)                   判断是否到了文件末尾

文件打开方式 说明
r  打开只能读的文件
w  建立供写入的文件,如果已存在就抹去原有数据
a  打开或建立一个把数据追加到文件尾的文件
r+  打开用于更新数据的文件
w+  建立用于更新数据的文件,如果已存在就抹去原有数据
a+  打开或建立用于更新数据的文件,数据追加到文件尾
注:以上用于文本文件的操作,如果是二进制文件就在上述字母后加“b”。
我们用文件最大的目的就是能让数据保存下来。因此在要用文件中数据的时候,就是要把数据读
到一个结构(一般保存数据多用结构,便于管理)中去,再对结构进行操作即可。例如,文件aa.data
中存储的是30个学生的成绩等信息,要遍历这些信息,对其进行成绩输出、排序、查找等工作时,
我们就把这些信息先读入到一个结构数组中,再对这个数组进行操作。如下例

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 30
 4 typedef struct student/*定义储存学生成绩信息的数组*/
 5 {
 6     char *name;
 7     int chinese;
 8     int maths;
 9     int phy;
10     int total;
11 }ST;
12 
13 void Output(ST*a);
14 void Bubble(ST*a);
15 void Find(ST*a);
16 
17 int main(int argc, char* argv[])
18 {
19     ST a[N];/*存储N个学生信息的数组*/
20     FILE *fp;
21     void(*process[3])(ST*)={Output,Bubble,Find};/*实现相关功能的三个函数*/
22     int choice,i=0;
23     Show();
24     printf("\nChoose:\n?");
25     scanf("%d",&choice);
26     while(choice>=0 && choice<=2)
27     {
28         fp=fopen("aa.dat","rb");
29         for(i=0;i<N;i++)
30             fread(&a[i],sizeof(ST),1,fp);/*把文件中储存的信息逐个读到数组中去*/
31         fclose(fp);
32         (*process[choice])(a);/*前面提到的指向函数的指针,选择操作*/
33         printf("\n");
34         Show();
35         printf("\n?");
36         scanf("%d",&choice);
37     }
38 }
39 void Show()
40 {
41     printf("\n****Choices:****\n0.Display the data form\n1.Bubble it according to the total score\n2.Search\n3.Quit!\n");
42 }
43 void Output(ST *a)/*将文件中存储的信息逐个输出*/
44 {
45     int i,t=0;
46     printf("Name Chinese Maths Physics Total\n");
47     for(i=0;i<N;i++)
48     {
49         t=a[i].chinese+a[i].maths+a[i].phy;
50         a[i].total=t;
51         printf("%4s%8d%8d%8d%8d\n",a[i].name,a[i].chinese,a[i].maths,a[i].phy,a[i].total);
52     }
53 }
54 void Bubble(ST*a)/*对数组进行排序,并输出结果*/
55 {
56     int i,pass;
57     ST m;
58     for(pass=0;pass<N-1;pass++)
59         for(i=0;i<N-pass-1;i++)
60             if(a[i].total<a[i+1].total)
61             {
62                 m=a[i];/*结构互换*/
63                 a[i]=a[i+1];
64                 a[i+1]=m;
65             }
66     Output(a);
67 }
68 void Find(ST*a)
69 {
70     int i,t=1;
71     char m[20];
72     printf("\nEnter the name you want:");
73     scanf("%s",m);
74     for(i=0;i<N;i++)
75         if(!strcmp(m,a[i].name))/*根据姓名匹配情况输出查找结果*/
76         {
77             printf("\nThe result is:\n%s, Chinese:%d,Maths:%d, Physics:%d,Total:%d\n",m,a[i].chinese,a[i].maths,a[i].phy,a[i].total);
78             t=0;
79         }
80     if(t)
81         printf("\nThe name is not in the list!\n");
82 }

 

posted @ 2012-10-15 09:41  Rookie_h  阅读(117)  评论(0编辑  收藏  举报