鱼C论坛

 找回密码
 立即注册
查看: 2900|回复: 6

自己写的一个很简单的学生管理系统,不知道错在哪里,求大神帮忙啊!!!

[复制链接]
发表于 2013-9-2 20:43:23 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef  struct Student
{
int grade;
char  name[4];
    struct Student  * next;
}Nodestud;

Nodestud* ctreate()
{
   Nodestud*head,*p,*q;
   head=NULL;
   
   printf(" ****  请输入学生的信息:*****\n\n");
   while(1)
   {
    p=(Nodestud*)malloc(sizeof(Nodestud));
       printf("请输入学生的姓名:");
    scanf("%s",p->name);
       if(strcmp(p->name,"#")==0)
    {
     p->next=NULL;
          return head;
     //break;
    }
    printf("请输入学生的成绩:");
    scanf("%d",&(p->grade));
    if(head==NULL)
    {
     head=p;
     q=head;
    }
    else
    {
     q->next=p;
     q=p;
    }
   }
   
}
void DeleStud(Nodestud*head)
{
  char nam[5];
  Nodestud*p,*q=head;
  printf("请输入要删除学生的姓名:\n");
  scanf("%s",nam);
  if(strcmp(q->name,nam)==0)
  {   head=q->next;
   free(q);
   
  }
  while(q)
  {
         if(strcmp(q->next->name,nam)==0)
   {
             p=q->next;
    q->next=p->next;
    free(p);
    p=NULL;
   }
  }
}
void Deststud(Nodestud*head)
{
    Nodestud*p=head;
while(p)
{
  head=p->next;
  free(p);
  p=head;
}
  printf("删除成功!\n");
}
void main()
{   
int chose;
start: printf("***** 1: 创建学生信息    *****\n");
          printf("***** 2: 删除某位学生信息*****\n");
          printf("***** 3: 销毁学生信息    *****\n");
          printf("***** 0:    退出***   *****\n");
           scanf("%d",&chose);
switch(chose)
{
case 1: Nodestud& stud=ctreate(); break;
case 2: DeleStud(&stud);break;
case 3:  Deststud(&stud);break;
    case 0:  exit(0);
}
   goto start;

}

最佳答案

查看完整内容

你的DeleStud函数里删除第一个结点的处理是不对的。 可以设置一个头结点来避免这种情况。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-2 20:43:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-2 20:55:07 | 显示全部楼层
帮楼主顶起来{:7_155:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-2 21:20:55 | 显示全部楼层
修改后的截图和代码。。。
1.png
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. typedef  struct Student
  5. {
  6.         int grade;
  7.         char  name[4];
  8.     struct Student  * next;
  9. }Nodestud;

  10. Nodestud* ctreate()
  11. {
  12.         Nodestud*head,*p,*q;
  13.         head=NULL;
  14.        
  15.         printf(" ****  请输入学生的信息:*****\n\n");
  16.         while(1)
  17.         {
  18.                 p=(Nodestud*)malloc(sizeof(Nodestud));
  19.                 printf("请输入学生的姓名:");
  20.                 scanf("%s",p->name);
  21.                 if(strcmp(p->name,"#")==0)
  22.                 {
  23.                         p->next=NULL;
  24.                         return head;
  25.                         //break;
  26.                 }
  27.                 printf("请输入学生的成绩:");
  28.                 scanf("%d",&(p->grade));
  29.                 if(head==NULL)
  30.                 {
  31.                         head=p;
  32.                         q=head;
  33.                 }
  34.                 else
  35.                 {
  36.                         q->next=p;
  37.                         q=p;
  38.                 }
  39.         }
  40.        
  41. }
  42. void DeleStud(Nodestud*head)
  43. {
  44.         char nam[5];
  45.         Nodestud*p,*q=head;
  46.         printf("请输入要删除学生的姓名:\n");
  47.         scanf("%s",nam);
  48.         if(strcmp(q->name,nam)==0)
  49.         {   head=q->next;
  50.         free(q);
  51.        
  52.         }
  53.         while(q)
  54.         {
  55.                 if(strcmp(q->next->name,nam)==0)
  56.                 {
  57.                         p=q->next;
  58.                         q->next=p->next;
  59.                         free(p);
  60.                         p=NULL;
  61.                         break;
  62.                 }
  63.         }
  64. }
  65. void Deststud(Nodestud*head)
  66. {
  67.     Nodestud*p=head;
  68.         while(p)
  69.         {
  70.                 head=p->next;
  71.                 free(p);
  72.                 p=head;
  73.         }
  74.         printf("删除成功!\n");
  75. }
  76. void main()
  77. {   
  78.         int chose;
  79.         Nodestud *stud;
  80. start: printf("***** 1: 创建学生信息    *****\n");
  81.            printf("***** 2: 删除某位学生信息*****\n");
  82.            printf("***** 3: 销毁学生信息    *****\n");
  83.            printf("***** 0:    退出***   *****\n");
  84.            scanf("%d",&chose);
  85.            switch(chose)
  86.            {
  87.            case 1: stud=ctreate(); break;
  88.            case 2: DeleStud(stud);break;
  89.            case 3:  Deststud(stud);break;
  90.            case 0:  exit(0);
  91.            }
  92.            goto start;
  93.           
  94. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-2 21:44:45 | 显示全部楼层
liufei_vip 发表于 2013-9-2 21:20
修改后的截图和代码。。。

QQ截图20130902214310.png



为什么我会这样啊??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-2 22:26:35 | 显示全部楼层
具体看一下这个帖子
http://bbs.fishc.com/thread-37330-1-1.html
他的问题跟你是一样的,在删除第一个节点的时候会出问题。
下面是我改的程序。。。
你可以参考一下。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-3 18:49:51 | 显示全部楼层
liufei_vip 发表于 2013-9-2 22:26
具体看一下这个帖子
http://bbs.fishc.com/thread-37330-1-1.html
他的问题跟你是一样的,在删除第一个节 ...

谢谢啦  !!!{:7_168:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-29 02:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表