#include <stdio.h>
#include<stdlib.h>
struct Student
{
char Class[10];
char Num[10];
char Name[10];
int score[5];
};
void main()
{
void menu();
void input(struct Student stu[],int n);
void output(struct Student stu[],int n);
void read_in(struct Student stu[],int n);
void save(struct Student stu[],int n);
struct Student stu[40];
int n=2;
int choice;
while(1)
{
menu();
printf("请输入一个选项:");
scanf("%d",&choice);
switch(choice)
{
case 1:input(stu,n);break;
case 2:output(stu,n);break;
case 3:read_in(stu,n);break;
case 4:save(stu,n);break;
case 5:exit(0);
}
}
}
void menu()
{
system("cls");
printf("\t\t\t1.输入\n");
printf("\t\t\t2.输出\n");
printf("\t\t\t3.从文件读入数据\n");
printf("\t\t\t4.保存至文件\n");
printf("\t\t\t5.退出\n");
}
void input(struct Student stu[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%s%s%s%d%d%d%d%d",stu[i].Class,stu[i].Num,stu[i].Name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]);
}
}
void output(struct Student stu[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s %s %s %d %d %d %d %d\n",stu[i].Class,stu[i].Num,stu[i].Name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
system("pause");
}
void read_in(struct Student stu[],int n)
{
FILE *fp;
int i;
if(fp=fopen("stu.dat","r"==NULL))
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fscanf(fp,"%s%s%s%d%d%d%d%d",stu[i].Class,stu[i].Num,stu[i].Name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]);
}
fclose(fp);
}
void save(struct Student stu[],int n)
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %s %d %d %d %d %d\n",stu[i].Class,stu[i].Num,stu[i].Name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
fclose(fp);
}
有一个磁盘文件,第一次将它的内容显示在屏幕上,第二次把它复制到另一文件上
#include <stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp1,*fp2;
fp1=fopen("stu.dat","r");
fp2=fopen("txet.txt","w");
while(!feof(fp1))
{
putchar(fgetc(fp1));
}
rewind(fp1);
while(!feof(fp1))
{
fputc(fgetc(fp1),fp2);
}
fclose(fp1);
fclose(fp2);
}
有10个包括姓名及电话号码的数据,编写程序将其存储到文件中。分别存储为ASCII(即fprintf、fscanf)与二进制(即fread、fwrite)两种形式。
ASCII
#include <stdio.h>
#include<stdlib.h>
//有10个包括姓名及电话号码的数据,编写程序将其存储到文件中,分别存储为ASCII(即fprintf、fscanf)形式
struct Telephone
{
char Name[10];
long int Tele_Num;
};
void main()
{
void read_in(struct Telephone Tele[],int n);
void save(struct Telephone Tele[],int n);
struct Telephone Tele[10];
int i,n=3;
for(i=0;i<n;i++)
{
scanf("%s%ld",Tele[i].Name,&Tele[i].Tele_Num);
}
save(Tele,n);
read_in(Tele,n);
}
void read_in(struct Telephone Tele[],int n)
{
FILE *fp;
int i=0;
if((fp=fopen("Text.txt","r"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fscanf(fp,"%s%ld\n",&Tele[i].Name,&Tele[i].Tele_Num);
}
fclose(fp);
}
void save(struct Telephone Tele[],int n)
{
FILE *fp;
int i;
if((fp=fopen("Text.txt","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fprintf(fp,"%s%ld\n",Tele[i].Name,Tele[i].Tele_Num);
}
fclose(fp);
}
二进制
#include <stdio.h>
#include<stdlib.h>
//有10个包括姓名及电话号码的数据,编写程序将其存储到文件中,分别存储为二进制(即fread、fwrite)形式
struct Telephone
{
char Name[10];
long int Tele_Num;
};
void main()
{
void read_in(struct Telephone Tele[],int n);
void save(struct Telephone Tele[],int n);
struct Telephone Tele[10];
int i,n=3;
printf("输入储存的数据:\n");
for(i=0;i<n;i++)
{
scanf("%s%ld",Tele[i].Name,&Tele[i].Tele_Num);
}
save(Tele,n);
read_in(Tele,n);
printf("输出储存的数据:\n");
for(i=0;i<n;i++)
{
printf("%s%ld\n",Tele[i].Name,&Tele[i].Tele_Num);
}
}
void read_in(struct Telephone Tele[],int n)
{
FILE *fp;
int i=0;
if((fp=fopen("stu.dat","r"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fread(&Tele[i],sizeof(struct Telephone),1,fp);
}
fclose(fp);
}
void save(struct Telephone Tele[],int n)
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<n;i++)
{
fwrite(&Tele[i],sizeof(struct Telephone),1,fp);
}
fclose(fp);
}