文件实验陈正宁123349.docx
《文件实验陈正宁123349.docx》由会员分享,可在线阅读,更多相关《文件实验陈正宁123349.docx(11页珍藏版)》请在冰豆网上搜索。
![文件实验陈正宁123349.docx](https://file1.bdocx.com/fileroot1/2023-1/26/2febcbd1-31d7-461b-8de8-8711f2aac6af/2febcbd1-31d7-461b-8de8-8711f2aac6af1.gif)
文件实验陈正宁123349
淮海工学院计算机科学系
实验报告书
课程名:
《C语言程序设计
(二)》
题目:
实验12文件
班级:
软嵌151
学号:
2015123349
姓名:
陈正宁
1、实验内容或题目
(1)编程将一个文本文件的内容复制到另一个文本文件中。
(2)编写一个程序,实现以下功能:
a)输入一系列的数据(学号、姓名、成绩)存放在二进制文件stud.dat中;b)从该文件中读出这些数据并显示出来。
(3)编写一个程序实现以下功能:
a)将由若干行(每行最多80个字符,最多100行)组成的一篇文章写入到文件in.dat中;b)从文件in.dat中读出这些字符串到xx数组中并显示;c)对xx数组中的字符串按字典顺序递增排序并将排序后的结果存入文件out.dat中;d)从文件out.dat中读出所有数据并显示。
2、实验目的与要求
(1)掌握磁盘文件的打开、关闭等基本操作;
(2)熟练掌握二进制文件和文本文件的读写操作;
(3)掌握文件字符、字符串的读写以及格式化读写;
(4)熟练掌握文件的随机读写。
3、实验步骤与源程序
实验步骤
(1)、
(2)、
(3)、
源代码
(1)、
#include
#include
voidmain()
{
FILE*from,*to;
charin[30],out[30];
printf("请输入要复制的文件名\n");
scanf("%s",in);
printf("请输入要粘贴的文件名\n");
scanf("%s",out);
if((from=fopen(in,"r"))==NULL)
{
printf("输入复制文件名有错误\n");
exit(0);
}
if((to=fopen(out,"w"))==NULL)
{
printf("输入粘贴文件名有错误\n");
exit(0);
}
printf("\n\n");
printf("正在复制,请稍后\n");
printf(".............\n\n");
printf("复制完成,请查收\n");
while(!
feof(from))
{
fputc(fgetc(from),to);
}
fclose(from);
fclose(to);
}
(2)、
#include
#include
#include
#defineN20
structstudent
{
charnum[N];
charname[N];
charscore[N];
}stu[N];
intmain(intargc,char*argv[])
{
FILE*fp;
intn,i;
if(!
(fp=fopen("stud.dat","wb")))
{
fprintf(stderr,"\nCANNOTOPENTHEFILE!
\a\a\a");
getch();
exit(-1);
}
printf("请输入学生人数:
");
scanf("%d",&n);
for(i=0;i{
printf("请输入学生学号:
");
scanf("%s",stu[i].num);
printf("请输入学生姓名:
");
scanf("%s",stu[i].name);
printf("请输入学生成绩:
");
scanf("%s",stu[i].score);
}
for(i=0;i{
if(1!
=fwrite(&stu[i],sizeof(structstudent),1,fp))
{
fprintf(stderr,"\n文件打开错误!
\n");
getch();
exit(-1);
}
}
printf("\n\n");
rewind(fp);
if(!
(fp=fopen("stud.dat","rb")))
{
fprintf(stderr,"\n文件打开错误!
\n");
getch();
exit(-1);
}
printf("学号姓名分数\n");
for(i=0;i{
if(1!
=fread(&stu[i],sizeof(structstudent),1,fp))
{
if(feof(fp))
{
fclose(fp);
return0;
}
fprintf(stderr,"\n文件打开错误!
\n");
}
printf("%8s%8s%5s\n",stu[i].num,stu[i].name,stu[i].score);
}
fclose(fp);
return0;
}
(2)、
#include
#include
#include
#include
#defineMAX80
intmain(intargc,char*argv[])
{
voidsort(char(*p)[MAX],intn);
FILE*fp;
chara[100][MAX],xx[100][MAX];
intn;
if(!
(fp=fopen("in.dat","wb+")))
{
fprintf(stderr,"\nCANNOTOPENTHEFILE!
\a\a\a");
getch();
exit(-1);
}
printf("请输入多少行文章:
");//功能a
scanf("%d",&n);
for(inti=0;i{
printf("请输入第%d行:
",i+1);
scanf("%s",&a[i]);
fputs(a[i],fp);
fputs("\n",fp);
}
rewind(fp);//功能b
printf("\n");
printf("in.dat内的数据为:
\n");
for(i=0;i{
fgets(xx[i],81,fp);
printf("%s",xx[i]);
}
sort(xx,n);//功能c
if(!
(fp=fopen("out.dat","wb+")))
{
fprintf(stderr,"\nCANNOTOPENTHEFILE!
\a\a\a");
getch();
exit(-1);
}
printf("\n");
printf("in.dat内的数据经排序后存入out.dat为:
\n");//功能d
for(i=0;i{
fputs(xx[i],fp);
printf("%s",xx[i]);
}
fclose(fp);
return0;
}
voidsort(char(*p)[MAX],intn)
{
inti,j,k;
chartemp[100];
for(i=0;i{
k=i;
for(j=i+1;j{
if(strcmp(p[k],p[j])>0)
{
k=j;
}
}
if(k!
=i)
{
strcpy(temp,p[i]);
strcpy(p[i],p[k]);
strcpy(p[k],temp);
}
}
}
4、测试数据与实验结果(可以抓图粘贴)
(1)、
(2)、
(3)、
5、结果分析与实验体会
(1).文件有不同的类型,在程序设计中,主要用到两种文件:
程序文件,数据文件,而我们主要讨论的是数据文件。
(2).要熟悉掌握使用文件方式表,P335页。
(3).在使用完文件指针后一定要养成最后使用fclose来关闭文件指针的习惯。
(4).我们可以使用顺序读写数据文件也可以随机读取数据文件。
(5)C提供了一些函数用来检查输入输出函数调用时可能出现的错误:
1.ferror函数
2.clearerr函数