想写个学生成绩管理系统,写了一个功能,两个函数,save函数用来保存数据到文件里,随便写了一段代码打印一个文件里的数据,结果乱码,不知道到底数据写没写进文件里。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define LEN sizeof(struct Student)
#include"声明.h"
#include"自定义函数.h"
int main(void)
{
char s[15];
while(1)
{
printf("请输入功能编号完成相应功能\n");
printf("1.输入学生信息并保存\n");
printf("2.从文件中读取学生信息,并建立链表\n");
printf("3.按学号删除学生信息\n");
printf("4.按学号插入学生信息\n");
printf("5.显示当前文件信息\n");
printf("6.查找总成绩最高的学生\n");
printf("7,寻找指定学号或姓名的学生并修改该学生信息 \n");
printf("8.查找某个专业、某门课程的成绩小于某个分数的学生\n");
printf("9.删除某个班级、某门课程的成绩小于某个分数的学生\n");
printf("10.按照姓名排序\n");
printf("11.保存当前信息\n");
printf("其他,推出系统\n");
int x;
struct Student *h;
printf("亲输入编号:");
scanf("%d",&x);
switch(x)
{
case(1):h=input();save(h);break;
声明部分
struct Student {
char num[10];//学号
char name[15];//姓名
char major[10];//专业computer,softwear,network
int classNo;//班级
int score[3];//3门课的成绩
int sum;//3门课的总成绩
struct Student *next;//指针 88u
};
int n,a;
struct Student * input();
void save(struct Student *head)
struct Student * input()
{
n=0;
struct Student *head;
struct Student *p1,*p2;
head=(struct Student *)malloc(LEN);
printf("请输入学生人数:");
scanf("%d",&a);
printf("请录入这%d名学生的信息:\n",a);
while(n<a)
{
p1=(struct Student*)malloc(LEN);
scanf("%s-%s-%s-%d-%d-%d-%d",p1->num,p1->name,p1->major,&p1->classNo,&p1->score[0],&p1->score[1],&p1->score[2]);
p1->sum=0;
p1->sum=p1->score[0]+p1->score[1]+p1->score[2];
n++;
p1->next=0;
if(n==1)
{
head=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
p2->next=NULL;
return(head);
}
void save(struct Student *head)
{
struct Student *p1,*p2;
p2=(struct Student*)malloc(LEN);
char s[15];
p1=head->next;
FILE *fp;
printf("亲输入要建立的文件名:\n");
scanf("%s",&s);
if((fp=fopen("s.txt","wb"))==NULL)
{
printf("打开文件失败");
exit(0);
}
while(p1!=NULL)
{
if(fwrite(p1,LEN,1,fp)!=1)
{
printf("写入文件失败\n");
}
p1=p1->next;
}
printf("写入文件成功!\n");
fclose(fp);
if((fp=fopen("s.txt","r"))==NULL)
{
printf("打开文件失败");
exit(0);
}
//下面是自己写的只想检验文件里面有没有数据。
fread(p2,LEN,1,fp);
printf("%s-%s-%s-%d-%d-%d-%d",p2->num,p2->name,p2->major,&p2->classNo,&p2->score[0],&p2->score[1],&p2->score[2]);
fclose(fp);
}
运行结果