文件的存取链表的使用Word文档格式.docx
《文件的存取链表的使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《文件的存取链表的使用Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
作业3:
实现学生信息的文件保存和读取。
作业4:
思考:
如何实现学生信息录入的动态长度控制?
提示:
使用链表,动态分配空间
Student*p1;
p1=malloc(sizeof(Student));
p1->
age=10;
structNode{
Studentstu;
Node*next;
}
代码:
1、用户从控制台输入一篇文章,输入完成以后,
#include<
stdio.h>
string.h>
intmain(intargc,constchar*argv[])
{chartext[2000];
charname[20];
charpath[100];
printf("
请输入内容\n"
);
gets(text);
请输入文件名\n"
scanf("
%s"
name);
strcpy(path,"
C:
\\Users\\Administrator\\Desktop\\"
strcat(name,"
.txt"
strcat(path,name);
//保存到文件
FILE*fp;
if((fp=fopen(path,"
w"
))==NULL)
{
printf("
无法读取文件"
return0;
}
fprintf(fp,"
%s\n"
text);
fclose(fp);
文件已成功写入"
return0;
2、实现学生信息的结构体定义
stdlib.h>
#defineNUM10
typedefstruct_Student{
charname[10];
intage;
intnumber;
intscore;
}Student;
{Studentstus[NUM];
//输入学生信息
请输入学生信息!
\n"
for(inti=0;
i<
NUM;
i++)
{printf("
请输入第%d个学生信息,格式:
姓名学号年龄成绩\n"
i+1);
scanf("
%s%d%d%d"
stus[i].name,&
stus[i].number,&
stus[i].age,&
stus[i].score);
}
//输出学生信息
学生信息:
\n姓名学号年龄成绩\n"
for(i=0;
i++)
%s%d%d%d\n"
stus[i].name,stus[i].number,stus[i].age,stus[i].score);
//最高分,最低分,平均分
typedefStudent*StuPointer;
StuPointersmax,smin;
smax=(StuPointer)malloc(sizeof(Student));
smin=(StuPointer)malloc(sizeof(Student));
*smax=stus[0];
*smin=stus[0];
intsum=stus[0].score;
floatave;
for(i=1;
if((*smax).score<
stus[i].score)
*smax=stus[i];
if((*smin).score>
stus[i].score)
*smin=stus[i];
sum=sum+stus[i].score;
ave=(float)sum/(float)NUM;
\n最高分的姓名和分数为:
%s%d\n"
(*smax).name,(*smax).score);
\n最低分的姓名和分数为:
(*smin).name,(*smin).score);
\n平均分为:
%f\n"
ave);
保存:
#defineNUM3
//写入文件
FILE*fp;
if((fp=fopen("
\\Users\\Administrator\\Desktop\\stu.txt"
"
打开文件失败!
{
stus[i].name,stus[i].number,stus[i].age,stus[i].score);
写入文件成功!
读取:
#include<
r"
))
==NULL)
exit(0);
inti=0;
while(!
feof(fp))
{fscanf(fp,"
stus
[i].age,&
i++;
//写出所读的学生信息
stus[i].name,stus[i].number,stus
[i].age,stus[i].score);
——————————————————————
charname[20];
intnumber;
intage;
intscore;
typedefstruct_Node{
Studentstu;
struct_Node*next;
}Node;
Node*head=NULL;
//定义第一个学生
voidreadStudent()
Node*p;
Node*newnode;
head=NULL;
FILE*fp;
if((fp=fopen("
\\Users\\Administrator\\Desktop\\Student.txt"
"
打开文件失败"
if((newnode=(Node*)malloc(sizeof(Node)))==NULL)
ERROR\n"
fclose(fp);
fscanf(fp,"
%d%s%d%d\n"
&
newnode->
stu.number,newnode->
stu.name,&
stu.age,&
stu.score);
if(head==NULL)
{head=newnode;
p=head;
else
p->
next=newnode;
p=newnode;
next=NULL;
printStudent();