C语言文件课内实验题(文件相关问题)

1.题目:
1.以只写的方式打开一个文件stu.txt,从键盘输入一组字符,将其保存到
磁盘文件stu.txt中。
2.以只读方式打开刚才的文件stu.txt,读取文件中的字符,保存到字符数
组str1中,并输出到屏幕上。
3.有6个学生,每个学生数据包括学号、姓名、3门课程的成绩。定义如
下结构体数组存放这6个学生的数据:
structstudent
{
intnum;
charname[20];
intscore[3];
}stu[6];
编写程序实现如下功能:
(1)从键盘输入6个学生的数据,将这6个学生的数据以ASCII格式写入
名为stu.txt的文本文件中。
(2)从stu.txt中读取数据到结构体数组stu1中,并输出stu1中的数据。
4.将第三题的数据,以二进制的格式写入到stu.dat的二进制文件中,同时
将数据从文件中读取,并输出至屏幕。
5.选做题:从第三题的文本文件中读取第1、3、5名学生的数据,将其存
入结构体数组stu1中,并输出至屏幕。
2:源代码:
第一题


1、源代码:
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
FILE*fp;
charch;//定义字符串ch
if((fp=fopen("stu.txt","w"))==NULL)//以只写的方式打开文件
{
printf("cannotopenfile\n");
exit(0);
}
ch=getchar();
while(ch!='#')//遇到#结束
{
fputc(ch,fp);//将ch写进文件
putchar(ch);//将ch显示到屏幕上
ch=getchar();//再读入一个字符,赋给变量ch
}
fclose(fp);//关闭文件
}

第二题

#include<stdio.h>
#include<stdlib.h>
voidmain()
{
FILE*fp;
inti=0;
charstr[1][10];//定义一个数组
if((fp=fopen("stu.txt","r"))==NULL)//以只读形式打开文件
{
printf("cannotopenfile\n");
exit(0);
}
while(fgets(str[i],10,fp)!=NULL)//当遇见空结束
{
printf("%s",str[i]);//输出每个字符
i++;
}
fclose(fp);//关闭文件
}

第三题

#include<stdio.h>
#include<stdlib.h>
structstudent//定义结构体
{
intnum;
charname[20];
intscore[3];
}stu[6],stu1[6];
voidmain()
{
FILE*fp;
inti;
if((fp=fopen("stu.txt","w+"))==NULL)以只写形式打开文件
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;i<6;i++)
{
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[
0],&stu[i].score[1],&stu[i].score[2]);//输入六个学生数据
}
for(i=0;i<6;i++)
{
fprintf(fp,"%d%s%d%d%d\n",stu[i].num,stu[i].name,stu[i].s
core[0],stu[i].score[1],stu[i].score[2]);//以ASCII形式写入
文件中
}
rewind(fp);//返回文件开始
for(i=0;i<6;i++)
{
fscanf(fp,"%d%s%d%d%d",&stu1[i].num,stu1[i].name,&stu1[i].
score[0],&stu1[i].score[1],&stu1[i].score[2]);
printf("%d%s%d%d%d\n",stu1[i].num,stu1[i].name,stu1[i].sc
ore[0],stu1[i].score[1],stu1[i].score[2]);//输出到stu1[6]
中。
}
fclose(fp);//关闭文件

第四题

#include<stdio.h>
#include<stdlib.h>
structstudent//定义结构体
{
intnum;
charname[20];
intscore[3];
}stu[6];
voidsave()//保存函数
{
FILE*fp;
inti;
if((fp=fopen("stu.dat","wb"))==NULL)//以二进制只写形式打开文件
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;i<6;i++)
{
if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)
printf("fileerror\n");
}
fclose(fp);//关闭文件
}
voidmain()
{
FILE*fp;
inti;
for(i=0;i<6;i++)//输入学生数据
{
scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[0],
&stu[i].score[1],&stu[i].score[2]);
}
save();//调用函数
if((fp=fopen("stu.dat","rb"))==NULL)//以二进制只读形式打开文件
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;i<6;i++)//输出学生数簓据
{
fread(&stu[i],sizeof(structstudent),1,fp);
printf("%d%s%d%d%d\n",stu[i].num,stu[i].name,stu[i].score
[0],stu[i].score[1],stu[i].score[2]);
}
fclose(fp);//关闭文件
}

第五题

#include<stdio.h>
#include<stdlib.h>
structstudent
{
intnum;
charname[20];
intscore[3];
}stu[6],stu1[6];
voidmain()
{
FILE*fp;
inti;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;i<6;i+=2)
{
fseek(fp,i*sizeof(structstudent),0);
fread(&stu1[i],sizeof(structstudent),1,fp);
printf("%d%s%d%d%d\n",stu1[i].num,stu1[i].name,stu1[i]
.score[0],stu1[i].score[1],stu1[i].score[2]);
}
fclose(fp);
}

猜你喜欢

转载自blog.csdn.net/weixin_48106407/article/details/107548352