66_SEVEN 2017-07-12 07:44 采纳率: 0%
浏览 770

帮忙看一下错在哪里呗~谢谢!

题目:班级成绩管理系统:
(1)要求利用链表指针来操作完成、动态内存分配。
(2)姓名、性别、程序设计训练课成绩。
(3)对成绩排序,同时可以插入学生、删除学生。
(4)按一定的格式进行文件保存、读取。
fprintf()与fscanf()
project中有文件score system.txt(内容有:zxc v 12.3)
好像无法用scanf函数从文件中获得链表
C语言源文件:
#include
#include
#include
#define LEN sizeof(struct Student)
struct Student
{
char name[20];
char sex;
float score;
struct Student *next;
};
struct Student *creat()
{
struct Student*head;
head=NULL;
return(head);
};
void insert(struct Student *p)
{
printf("请输入插入学生信息(姓名,性别,分数):\n");
struct Student *q;
q=(struct Student *)malloc(LEN);
int flag=0;
scanf("%s,%c,%f",q->name,&q->sex,&q->score);
while(p!=NULL)
{

    if(p->next->score>q->score)
    {

        q->next=p->next;
        p->next=q;

        flag=1;
    }
    p=p->next;
}
    if(flag==0)
    {
        p->next=q;
        q->next=NULL;
    }
return 0;

}
void del(struct Student *p)
{
if(p==NULL)
{
printf("\nlist null!\n");goto end;
}
printf("请输入删除学生姓名:\n");
char str[20];
int flag=0;
scanf("%s",str);
struct Student *q;
while(p!=NULL)
{
if(strcmp(p->next->name,str)==0)
{
flag=1;
q=p->next;
p->next=q->next;
free(q);
break;
}
p=p->next;

    }
    if(flag==0)
            printf("No Find!\n");
    end:return(p);

}
int main()
{
FILE*fp;
if((fp=fopen("score system.txt","r+"))==NULL)
{
printf("can't open this file!\n");
exit(0);
}
printf("********************************************************************************\n");
printf("\n\t\t\t\t1插入学生\n\t\t\t\t2删除学生\n");
printf("\n********************************************************************************\n");

struct Student *head,*p,*q;
head=creat();
p=head;
q=head;
while(!feof(fp))
{
    p=(struct Student*)malloc(LEN);
    fscanf(fp,"%s,%c,%f",p->name,&p->sex,&p->score);
    p=p->next;
}
fclose(fp);
int n;
scanf("%d",&n);
switch(n)
{
    case 1:insert(head);break;
    case 2:del(head);break;
}
p=head;
if((fp=fopen("score system.txt","r+"))==NULL)
{
    printf("can't open this file!\n");
    exit(0);
}
while(p!=NULL)
{
    fprintf(fp,"\n%s %c %.1f",p->name,p->sex,p->score);
    p=p->next;
}
fclose(fp);
return 0;

}

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2018-08-03 15:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制