怎么完善它???
#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);