Description
文件a.dic、b.dic、c.dic中分别存有张三的三科成绩,每个文件都是16字节:前8个字节存储其英文名字zhangsan,后面是一个空格,其后的2个字节存储其年龄(文本方式存储)
,后面也是一个空格,最后4个字节存储的是某科考试成绩(二进制方式存储)。键盘输入一个数字(1,2,3),根据输入的数字从相应的文件中读出张三的数据并显示。
数字和文件的对应关系是:
1----a.dic
2----b.dic
3----c.dic
Input
输入1、2、3中的一个
Output
输出张三的数据,每项一行
Sample Input
1
Sample Output
zhangsan
18
96
Code 1 here:
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 FILE *fp; 6 char name[9]; 7 int n,age,score; 8 scanf("%d",&n); 9 if(n==1) 10 if((fp=fopen("C:\\vc\\a.dic","r"))==NULL) 11 { 12 printf("打开文件失败\n"); 13 exit(1); 14 } 15 if(n==2) 16 if((fp=fopen("C:\\vc\\b.dic","r"))==NULL) 17 { 18 printf("打开文件失败\n"); 19 exit(1); 20 } 21 if(n==3) 22 if((fp=fopen("c.dic","r"))==NULL) 23 { 24 printf("打开文件失败\n"); 25 exit(1); 26 } 27 fgets(name,9,fp);///读取n-1个字符 28 fscanf(fp,"%d",&age);///无视空格 29 fgetc(fp);///去掉空格 30 fread(&score,4,1,fp);///二进制方式读取 31 fclose(fp);///关闭文件 32 printf("%s\n%d\n%d\n",name,age,score); 33 return 0; 34 }
Description
文件中存有3个人的姓名和数据(数据是不超过10000的整数),姓名是文本方式存储的,数据是二进制方式存储的,姓名和数据之间有一个空格,
当初这些数据是通过以下代码写进去的:
fp=fopen(filename,"wb"); //filename是数组名,其中存有文件名
for(i=1;i<=3;i++)
{
scanf("%s",name);
scanf("%d",&score);
fprintf(fp,"%s ",name); //%s后面有一个空格
fwrite(&score,4,1,fp);
}
文件已在后台,键盘输入文件名,读出并显示文件中的数据
Input
输入文件名
Output
输出三个人的数据
Sample Input
sample.dic
Sample Output
zhang,1990
wang,9678
sun,789
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 FILE *fp; 6 int i,score; 7 char filename[20],name[9]; 8 fp=fopen(gets(filename),"wb+");///取文件名的方法 9 for(i=1; i<=3; i++) 10 { 11 scanf("%s",name); 12 scanf("%d",&score); 13 fprintf(fp,"%s ",name///%s后面有一个空格 14 fwrite(&score,4,1,fp); 15 } 16 rewind(fp);///读写转换 17 for(i=1; i<=3; i++) 18 { 19 fscanf(fp,"%s",name); 20 fgetc(fp);///名字与成绩之间有空格需要fgetc取走或者fseek(fp,1,1); 21 fread(&score,4,1,fp); 22 printf("%s,%d\n",name,score); 23 } 24 return 0; 25 }
从键盘中输入学生的学号,姓名,班级,成绩到文件中,按照成绩高低排名,输出到显示器(每一个内容之间有两个空格)
文件中的内容
1 wkf 1 78
2 ygh 1 88
3 wl 1 99
4 tcm 1 98
1 liuxc 1 67
1 #include<stdio.h> 2 #include<stdlib.h> 3 # define N 5///宏定义,可以用来设定有多少个学生的信息 4 typedef struct student 5 { 6 unsigned num; 7 char name[9]; 8 unsigned cla; 9 int score; 10 } STU; ///结构体来存储一个人的各种信息 11 void input() 12 { 13 STU s; 14 FILE *fp; 15 int i; 16 fp=fopen("C:\\vc\\b.dic","w+"); 17 if(fp==0) 18 { 19 printf("File Open Error!\n"); 20 exit(1); 21 } 22 23 for(i=1; i<=N; i++) 24 { 25 scanf("%d%s%d%d",&s.num,s.name,&s.cla,&s.score);///输入班级和成绩 26 fprintf(fp,"%2d %-8s %d%3d\n",s.num,s.name,s.cla,s.score); 27 } 28 fclose(fp); 29 }///向文件中输入 30 void output() 31 { 32 STU s[N],t;///因为要排序,所以要使用数组 33 FILE *fp; 34 int i,j,k; 35 fp=fopen("C:\\vc\\b.dic","r+"); 36 if(fp==0) 37 { 38 printf("File Open Error!\n"); 39 exit(1); 40 } 41 for(i=0; i<=N-1; i++) 42 { 43 fscanf(fp,"%d",&s [i].num); 44 fseek(fp,2,1);///要跳出name之后的两个空格 45 fgets(s[i].name,9,fp);///使用fgets的原因是为了防止名字中出现空格 46 fscanf(fp,"%d%d",&s[i].cla,&s[i].score); 47 48 } 49 fclose(fp); 50 for(i=0; i<=N-2; i++) ///选择法排序 51 { 52 k=i; 53 for(j=i+1; j<=N-1; j++) 54 if(s[j].score>s[k].score) 55 k=j; 56 t=s[i]; 57 s[i]=s[k]; 58 s[k]=t; 59 } 60 for(i=0; i<=N-1; i++) 61 printf("%d %s %d %d\n",s[i].num,s[i].name,s[i].cla,s[i].score); 62 } 63 int main() 64 { 65 input(); 66 output(); 67 return 0; 68 }
Description
用二进制方式打开文件并向文件中写了若干人的数据,每人的数据都有两项:其一是名字,是用文本方式写的,
其二是薪金(整数),是用二进制方式写的,名字后面和薪金后面各存有一个空格,每人都如此。除此之外文件中再无其他内容
即:文件中数据的存储顺序是名字 薪金 名字 薪金 名字 薪金......名字 薪金
文件已存在,键盘输入文件名,按顺序读出并显示所有人的数据。
说明:
1、所有人的名字中都不含空格,即:没有诸如“Bill Gates” 之类的名字
2、最后一个人的薪金之后,也有一个空格
3、OJ平台不支持fseek()函数,程序中不能使用fseek(),但你可以利用“读数据时读写位置指针会自动移动”这一特点来移动指针
4、文件在当前目录中,打开文件时不需要考虑盘符和路径
提示:若需要一个文件来验证程序的运行结果,可自行编程建立一个
Input
输入文件名
Output
输出所有人的数据
Sample Input
a.dic
Sample Output
zhangsan,2000
lisi,8000
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 FILE *fp; 6 int score; 7 char filename[20],name[9]; 8 fp=fopen(gets(filename),"rb"); 9 fscanf(fp,"%s",name);///读取名字 10 fgetc(fp);///取掉空格 11 fread(&score,4,1,fp);///二进制读成绩 12 while(!feof(fp)) 13 { 14 printf("%s,%d\n",name,score); 15 fscanf(fp,"%s",name); 16 fgetc(fp); 17 fread(&score,4,1,fp); 18 } 19 return 0; 20 }