/*2.定义一个结构体变量struct student, 4个成员,学号,姓名,科目和成绩 (两个结合成一个成员),还有一个本结构体的指针
任务一: 在main函数中定义一个struct student结构体数组,其长度为5
任务2: 编写一个函数用于从键盘上输入5个学生信息
任务3: 编写函数将第二题的结构体数组中的5个学生的信息用动态分配内存的方式组成一个单链表
再编写一个函数输出到桌面。
任务4: 将第3题中的单链表的5个节点依次存入文件file
任务五: 从第四题中文件file.txt读取第1,3,5个节点界面输出并存入文件file2.txt*/
#include <stdio.h>
#include <stdlib.h>
#define N 5//可以改的数
#define LEN sizeof(struct Student) //长度为结构体的长度
struct Student
{
char num;
char name[10];
char sub[10];
int score;
struct Student *next;
};
void inputandoutput(struct Student stu[])//输入数组和打印出来
{
int i;
for(i=0;i<N;i++)
{
scanf("%c %s %s %d",&stu[i].num,stu[i].name,stu[i].sub,&stu[i].score);
stu[i].next=NULL;
getchar();
}
for(i=0;i<N;i++)
{
printf("No.%c %s %s %d\n",stu[i].num,stu[i].name,stu[i].sub,stu[i].score);
}
}
void line(struct Student stu[])//动态链表
{
struct Student *p1,*p2;
int i;
FILE *fp;
p1=p2=(struct Student *)malloc(LEN);//给指针分配空间
for(i=1;i<=N;i++)
{
if(i==1) p1=stu;
else p2->next=p1;
p2=p1;
p1=(struct Student *)malloc(LEN);
p1=&stu[i];
}
printf("现在输出链表:\n");//输出动态链表
p1=stu;
for(i=0;i<N;i++)
{
printf("No.%c %s %s %d\n",p1->num,p1->name,p1->sub,p1->score);
p1=p1->next;
}
p1=stu;//和输出列表相似,把列表通过fprintf打入到文件中
if((fp=fopen("flim.txt","wt"))==NULL)
{
printf("eorre\n");
exit(0);
}
while(p1)
{
fprintf(fp,"%c %s %s %d\n",p1->num,p1->name,p1->sub,p1->score);//指针,格式,变量//这里用了fprintf也可以用fwrite输入
p1=p1->next;//下一个
}
fprintf(fp,"\n");
fclose(fp);
}
void read(struct Student stu[])
{
FILE *fp,*fp2;
int i,n;
struct Student stu2[N]={'\0'};
if((fp=fopen("flim.txt","rb"))==NULL)
{
printf("error\n");
exit(0);
}
for(i=0;i<N;i+=2)
{
fseek(fp,i*sizeof(stu[i]),0);
fread(&stu2[i],sizeof(struct Student),1,fp);
printf("No.%c %s %s %d\n",stu2[i].num,stu2[i].name,stu2[i].sub,stu2[i].score);
}
if((fp2=fopen("film2.txt","wt"))==NULL)
{
printf("error\n");
exit(0);
}
for(i=0;i<N;i+=2)
{
fwrite(&stu2[i],sizeof(struct Student),1,fp2);
}
fclose(fp);
fclose(fp2);
}
int main()
{
int i;
struct Student stu[N];
inputandoutput(stu);
line(stu);
for(i=0;i<N;i++)
printf("一个结构体的字节数为:%d\n",sizeof(stu[i]));
read(stu);
return 0;
}
angie
相关分类