| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 531 人关注过本帖
标题:关于链表指针的一些问题
只看楼主 加入收藏
请叫我苏哥
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2011-11-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
关于链表指针的一些问题
增加,修改,查找那里的信息怎么会空了1个出来的
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define bool int
#define true 1
#define false 0
#define LEN sizeof(struct System)
struct System                      /*存放学生信息*/
{

 char name[20];                 /*姓名*/

 char num[10];                  /*学号*/

 char c[5];                     /*c语言成绩*/

 char match[5];                 /*数学成绩*/

 char english[5];               /*英语成绩*/

 struct System *next;           /*下个结点*/
};
typedef struct System sys;
sys *head = NULL;
void ShowMenu();                   /*菜单*/
void Find();                       /*输出单个信息*/
void Display();                    /*输出全部信息*/
void Addition();                   /*增加学生信息*/
void Modify();                     /*修改学生信息*/
void Delete();                     /*删除学生信息*/
void Aver();
void Save();                       /*输出信息到文件*/
void Open();                       /*文件信息输出到链0表*/ 
sys *FindMessage();                /*查找信息*/
int main()
{

 char x;

 bool quit = false;                /*创建并设置退出循环的条件为假*/ 

 Open();

 while(!quit)

 {
  ShowMenu();                      /*显示菜单*/
  scanf("%s", &x);
  switch(x)
  {
  case'0':
   quit = true;
   Save();
   break;
  case'1':
   Addition();
   break;
  case'2':
   Modify();
   break;
  case'3':
   Delete();
   break;
  case'4':
   Find();
   break;
  case'5':
   Display();
   break;
  default:
   break;
  }

 }

 return 0;
}
/*菜单显示*/
void ShowMenu()
{

 printf("\n********************************************* \n");

 printf("1.增加学生 ");

 printf("2.修改学生 ");

 printf("3.删除学生 ");

 printf("4.查找学生 ");

 printf("5.显示全部学生 ");

 printf("0.退出\n");

 printf("********************************************* \n");

 printf("请选择 ");
}

/*增加信息*/
void Addition()
{

 sys *p1 = NULL, *p2 = NULL;

 p1 = (sys * )malloc(sizeof(sys));

 printf("输入姓名:");

 scanf(" %s ",p1->name);

 printf("输入学号:");       

 scanf(" %s ",p1->num);

 printf("输入c语言成绩:");

 scanf(" %s ",p1->c);

 printf("输入数学成绩:");

 scanf(" %s ",p1->match);

 printf("输入英语成绩:");

 scanf(" %s ",p1->english);

 p1->next = NULL;

 if(NULL == head)

 {
  head = (sys * )malloc(sizeof(sys));
  head->next=p1;

 }else

 {
  for(p2 = head;p2->next!=NULL;p2=p2->next);
  p2->next=p1;

 }
}
/*查找用户*/
void Find()
{

 sys *p = FindMessage();

 if(NULL==p)
  printf("对不起,没有找到该学生!\n");

 else
  printf("找到该学生:\n姓名:%s 学号:%s c语言成绩:%s 数学成绩:%s 英语成绩:%s\n", p->next->name, p->next->num, p->next->c, p->next->match, p->next->english);

}
/*查找用户函数*/
sys *FindMessage()
{

 char name[20];

 sys *p = NULL;

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

 scanf(" %s ",name);

 if(head == NULL)

 {
  printf("学生管理系统没有记录,请输入记录后,再使用功能!\n");
  return NULL;

 }

 for(p = head; p->next!= NULL; p = p->next)
  if(!strcmp(p->next->name,name))
   return p;
  return NULL;
}

/*显示所有信息*/
void Display()
{
    sys * p = NULL;
    if(head==NULL)
    {
        printf("学生管理系统没有记录,请输入记录后,再使用功能!\n");
        return;
    }
    for(p = head->next;p!=NULL;p=p->next)
        printf("姓名:%s 学号:%s c语言成绩:%s 数学成绩:%s 英语成绩:%s\n", p->name, p->num, p->c, p->match, p->english);
}

/*修改信息*/
void Modify()
{
    sys *p=FindMessage();
    if(NULL==p)
        printf("对不起,没有找到该学生!\n");
    else
    {
     printf("要修改学生的信息:\n姓名:%s 学号:%s c语言成绩:%s 数学成绩:%s 英语成绩:%s\n", p->next->name, p->next->num, p->next->c, p->next->match, p->next->english);
     printf("请输入新的姓名:\n");
     scanf("%s",p->next->name);
     printf("请输入新的学号:\n");
     scanf("%s",p->next->num);
     printf("请输入新的c语言成绩:\n");
     scanf("%s",p->next->c);
     printf("请输入新的数学成绩:\n");
     scanf("%s",p->next->match);
     printf("请输入新的英语成绩:\n");
     scanf("%s",p->next->english);
     p->next->next=NULL;
    }
}

/*删除信息*/
void Delete()
{
    sys *temp = NULL;
    sys *p=FindMessage();
    if(NULL==p)
        printf("对不起,没有找到该学生!\n");
    else
    {
        printf("要删除学生的信息:\n姓名:%s 学号:%s c语言成绩:%s 数学成绩:%s 英语成绩:%s\n", p->next->name, p->next->num, p->next->c, p->next->match, p->next->english);
        temp=p->next;
        p->next=p->next->next;
        free(temp);
    }
}

/*输出信息到文件,并释放链表空间*/
void Save()
{
    sys *p=NULL;
    FILE *fp;
    char *filename="book.txt";
    if(head==NULL)
    {
        printf("\n记录为空!\n");
        return;
    }
    else
        p=head->next;
    if((fp=fopen(filename,"w"))==NULL)   /*出错检测*/
    {
        printf("\n打不开文件!\n");
        return;
    }
    while(p!=NULL)
    {
        fprintf(fp, "%s\t %s\t %s\t %s\t %s\t\n",p->name, p->num, p->c, p->match, p->english);
        p=p->next;
    }
    printf("保存完毕!\n");
    fclose(fp);
    for(;head->next!=NULL;)
    {
        p=head->next;
        head->next=head->next->next;
        free(p);
    }
    free(head);
}

/*读取文件信息输出到链表*/
void Open()
{
    FILE *fp;
    sys *p1=NULL, *p2=NULL, *temp=NULL;
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("\n**************这是一个新的学生管理系统***************");
        return;
    }
    head=(sys *)malloc(sizeof(sys));
    head->next=NULL;
    temp=p2=head;
    while(!feof(fp))                      /*读取文件信息*/
    {
        p1=(sys *)malloc(LEN);
        temp=p2;
        p2->next=p1;
        p2=p1;
        fscanf(fp,"%s %s %s %s %s", p1->name, p1->num, p1->c, p1->match, p1->english);
    }
    temp->next=NULL;
    fclose(fp);
}
搜索更多相关主题的帖子: 信息 false color 
2011-12-14 15:06
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:20 
你为什么每次用scanf之类的函数做输入字符串的时候喜欢用“ %s ”,即%s前后都有空格,一般前面加空格是为了过滤掉回车符,后面加空格是有问题的,意思是输入该字符串之后,回车再需输入字符才能结束。有的地方这么写,有的地方又只写“%s”,我没仔细看你的链表是否错误,你先把这个问题解决了再说,不懂可以百度下scanf对字符串输入存在的问题,我一般用gets函数

我的地盘
2011-12-14 15:59
请叫我苏哥
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2011-11-26
收藏
得分:0 
回复 2楼 hnuhsg1226
原来是这样子的。太感谢啦。可以完美运行啦。我搞了老半天都没有搞到
2011-12-14 18:31
光着脚丫
Rank: 2
来 自:大连
等 级:论坛游民
帖 子:10
专家分:11
注 册:2011-11-29
收藏
得分:0 
我现住就在学习这东西   伤人啊  不会啊

          我像傻瓜一样地聪明着、、、、
2011-12-15 09:04
快速回复:关于链表指针的一些问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034798 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved