c语言自定义函数不运行,] 为什么不能运行自定义load函数,调用保存的数据

//实训4.cpp : 定义控制台应用程序的入口点。实训1.cpp : 定义控制台应用程序的入口点。实训2.cpp : 定义控制台应用程序的入口点。//

#include "stdafx.h"

#include "stdlib.h"

#include "string.h"

struct STU

{

int xuehao;

char name[30];

float daolun;

float cyuyan;

float english;

float math;

float sum;

float avg;

struct STU *next;

};

struct STU * input (void);

void list (struct STU * p);

struct STU * save(struct STU *p);

struct STU * load(struct STU *p);

void clear_list();

void find(struct STU *p);

void total(struct STU *p);

struct STU *head,*tail=NULL;

int n=0;

struct STU *p=NULL;//p是头节点struct STU *q=NULL;//保存文件地址struct STU *a=NULL;//加载后文件地址int _tmain(int argc, _TCHAR* argv[])

{

while(1)

{

printf("Hello Worlf!\n");

printf("\n1:载入成绩");

printf("\n2:列出成绩");

printf("\n3:录入成绩");

printf("\n4:查询成绩");

printf("\n5:成绩统计");

printf("\n6:修改成绩");

printf("\n7:另存为成绩");

printf("\n8:加密成绩");

printf("\n9:排名次");

printf("\n0:退出");

int v;

printf("请选择");

scanf("%d",&v);

fflush(stdin);

switch(v){

case 1:

p=input();

break;

case 2:list(p);break;

case 3:q=save(p);break;

case 4:a=load(q);break;

case 5:find(p);break;

case 6:total(p);break;

}

}

return 0;

}

struct STU * input (void)

{

while(true)

{

printf("\n第%d位同学:",n+1);

struct STU *p=(struct STU *)malloc(sizeof(struct STU ));//临时节点,每个同学就新建一个节点 p->next=NULL;

printf("\n输入学号");

scanf("%f",&p->xuehao);//当输%d再输出%s,必须getchar();,不然直接跳过getchar();

printf("\n输入姓名");

gets(p->name);

printf("\n输入导论");

scanf("%f",&p->daolun);

printf("\n输入c语言");

scanf("%f",&p->cyuyan);

printf("\n输入英语");

scanf("%f",&p->english);

printf("\n输入数学");

scanf("%f",&p->math);

//加入链表中 if (head==NULL)//链表还是空的 {

tail=head=p;

}

else//链表中已有信息 {

tail->next=p;

tail = p;

}

n++;

getchar();//去掉缓存中的内容

char c;

printf("\n\n还要输入吗(Y/N)");

scanf("%c", &c);

if (c!='y' && c!='Y')

break;

getchar();//去掉缓存中的内容

}

return p;

}

void list (struct STU * p)

{

p = head;//p指向链表头//遍历链表中的每一个元素,并打印其信息 while (p!=NULL)

{

printf("\n输入学号%.0f",p->xuehao);

printf("\t输入姓名%s\t",p->name);

printf("\n输入导论%.1f",p->daolun);

printf("\t输入c语言%.1f",p->cyuyan);

printf("\t输入英语%.1f",p->english);

printf("\t输入数学%.1f",p->math);

p=p->next;

}

}

struct STU * save(struct STU *p)

{//保存 FILE* fs;

fs=fopen("d:\\score.dat","wb");

fprintf(fs,"%d",n);//先保存人数到文件

p = head;//p指向链表头//遍历链表中的每一个元素,分别把它们写入到文件中 while (p!=NULL)

{

//把p所指的结构体写入文件中 int len = sizeof(struct STU);

fwrite(p, len ,1 , fs); //把p所指向的内存块(长为len)的1块存入fs指定的文件 p=p->next;

}

fclose(fs);

return q;

}

struct STU *load(struct STU *q)

{//载入 clear_list();//清除原有的链表中数据

FILE* fs;

fs=fopen("c:\\score.dat","rb");

fscanf(fs,"%d",&n);//读入人数//要逐个读入n个块的结构内容 for(int i=0; i

{

//分配一个结构空间,用来接收从文件读入的一个结构数据 struct STU*q = (struct STU*) malloc( sizeof(struct STU));

int len = sizeof(struct STU);

fread(q,len,1,fs);

fclose(fs);

return a;

}

}

void clear_list()

{

//清除所有的成绩 (从头开始清除) struct STU *p = head;//p指向链表头 while (p!=NULL)

{

head = head->next;

free(p);

p=head;

}

n=0;

}

void find(struct STU *p)

{//删除一个同学的信息 char st_name[20];

printf("\n输入要查询同学的姓名:");

gets(st_name);

p = head;//p指向链表头 struct STU *q=NULL;//指向上一个无素//遍历链表中的元素,找到这同学的信息结构体(指针p指向它) while (p!=NULL)

{

//是不是要找的学生 if (strcmp(st_name, p->name)==0)

{

printf("\n输入学号%.0f",p->xuehao);

printf("\t输入姓名%s\t",p->name);

printf("\n输入导论%.1f",p->daolun);

printf("\t输入c语言%.1f",p->cyuyan);

printf("\t输入英语%.1f",p->english);

printf("\t输入数学%.1f",p->math);

//把找到的这个同学的结构体从链表中删除,并回收其内存//if (q==NULL)//说明:p指向的结构体是头结构体//{//head=head->next;//把头指针指向新的头结构//free(p);//}//else//{//q->next=p->next;//free(p);//} break;

}

q=p;

p=p->next;

}

}

void total(struct STU *p)

{

p = head;//p指向链表头//遍历链表中的每一个元素,并打印其信息 p->sum=0;

while (p!=NULL)

{

p->sum+=p->math;

p=p->next;

}

printf("%.1f",p->sum);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值