首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

如何完善它?

2012-02-04 
怎么完善它???#includestdio.h #includestring.h #includestdlib.h typedefstructsNode{//定义结构

怎么完善它???
#include   "stdio.h "
#include   "string.h "
#include   "stdlib.h "

typedef   struct   sNode   {//定义结构体
char   num[8];
char   name[12];
char   zy[20];
int   score;
char   sex[4];
struct   sNode*   next;
}*LinkList,LNode;

//1、在头部插入
LinkList   Creat_LinkList1()//在头部建立链表
{
LinkList   L=NULL;
LNode   *s;
char   num[8],name[12],zy[20],sex[4];
int   score;
scanf( "%s%s%s%s%d ",num,name,sex,zy,&score);
while   (strcmp(num, "0 ")!=0)
{
s=(LNode   *)malloc(sizeof(LNode));
strcpy(s-> num,num);
strcpy(s-> name,name);
strcpy(s-> sex,   sex);
strcpy(s-> zy,zy);
s-> score=score;
s-> next=L;L=s;
scanf( "%s%s%s%s%d ",num,name,sex,zy,&score);
}
return   L;
}

//2、在尾部插入
LinkList   Creat_LinkList2()//在尾部建立链表
{
LinkList   L=NULL;
LNode   *s,*r=NULL;
char   num[8],name[12],zy[20],sex[4];
int   score;
scanf( "%s%s%s%s%d ",num,name,sex,zy,&score);
while   (strcmp(num, "0 ")!=0)
{
s=(LNode   *)malloc(sizeof(LNode));
strcpy(s-> num,num);
strcpy(s-> name,name);
strcpy(s-> sex,sex);
strcpy(s-> zy,zy);
s-> score=score;
if   (L==NULL)   L=s;
else   r-> next=s;
r=s;
scanf( "%s%s%s%s%d ",num,name,sex,zy,&score);
}
if   (r!=NULL)   r-> next=NULL;
return   L;
}

void   TraverseList(struct   sNode*   HL)//遍历链表
{
while   (HL!=NULL)
{
printf( "%s   %s   %s   %s   %d ",HL-> num,HL-> name,HL-> sex,HL-> zy,HL-> score);
HL=HL-> next;
printf( "\n ");
}
}

void   Find_LinkList(struct   sNode*   HL)//查找链表中的数据
{
char   name[12];
printf( "请输入要查找的姓名!输入“Q”退出!\n ");
scanf( "%s ",name);
while(HL!=NULL&&strcmp(HL-> name,name)!=0)
{
if   (strcmp(name, "Q ")==0)
break;
HL=HL-> next;
}
printf( "学号     姓名     性别     专业     入学成绩\n ");

printf( "%s   %s   %s   %s   %d\n ",HL-> num,HL-> name,HL-> sex,HL-> zy,HL-> score);
}

void   main()
{char   c;
struct   sNode   *p=NULL;

while(c!=6)
{
printf( "请选择...\n ");
printf( "┏━━━━━━┓\n ");
printf( "┃1、建立链表   ┃\n ");
printf( "┃2、插入数据   ┃\n ");
printf( "┃3、删除数据   ┃\n ");
printf( "┃4、查找数据   ┃\n ");
printf( "┃5、显示数据   ┃\n ");
printf( "┃6、退出系统   ┃\n ");
                  printf( "┗━━━━━━┛\n ");
printf( "\n ");

c=getchar();

switch(c)
{
case   '1 ':printf( "你选择了:建立链表\n ");
printf( "请输入数据!\n ");
printf( "学号     姓名     性别     专业     入学成绩   (以学号为0作为结束点)\n ");
p   =   Creat_LinkList1();
break;

case   '2 ':printf( "你选择了:插入数据\n ");
printf( "请输入数据!\n ");


printf( "学号     姓名     性别     专业     入学成绩   (以学号为0作为结束点)\n ");
p   =   Inser_LinkList;break;

case   '3 ':printf( "你选择了:删除数据\n ");;break;

case   '4 ':printf( "你选择了:查找数据\n ");
Find_LinkList(p);
break;

case   '5 ':printf( "你选择了:显示数据\n ");
printf( "学号     姓名     性别     专业     入学成绩\n ");
TraverseList(p);
break;

case   '6 ':printf( "你选择了退出本系统!\n ");break;

}
if(c== '6 ')
break;
}

}


2、插入数据  
3、删除数据
这两个函数还没写!!

另外,每次运行都会出现两个窗口
printf( "┏━━━━━━┓\n ");
printf( "┃1、建立链表   ┃\n ");
printf( "┃2、插入数据   ┃\n ");
printf( "┃3、删除数据   ┃\n ");
printf( "┃4、查找数据   ┃\n ");
printf( "┃5、显示数据   ┃\n ");
printf( "┃6、退出系统   ┃\n ");
                  printf( "┗━━━━━━┛\n ");

我知道是接收到回车键啦,但怎么才能不接收呢???

[解决办法]
c=getchar();
==》
scanf( "%c%*c ", &c);
[解决办法]
首先:char c; 没有初始化,危险!!

c=getchar();
while (!(c <= '6 ')&&(c> = '1 '))
{
c = getchar();
}

只接收1到6的按键。
[解决办法]
char c; ———> char c = 0;

c = getchar(); 一行的前面加 fflush(stdin);

热点排行