数据结构链表新手,该如何处理
数据结构链表新手
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 200
#define NAMESIZE 20
void Line();
int Judge();
int menu();
void BackToMenu();
typedef struct
{
char name[NAMESIZE];
long telNumber;
}datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
LinkList head;
LinkList CreatList()
{
LinkList L=NULL;
Lnode *s,*r=NULL;
int flag=1;
int test;
// char name[NAMESIZE];
// scanf("%s",name);
while(flag)
{
s=(Lnode*)malloc(sizeof(Lnode));
if(L==NULL)
L=s;
else
r->next=s;
r=s;
Line();
printf("-------请----输----入---------\n");
printf("姓名 电话\n");
scanf("%s%l",s->data.name,s->data.telNumber);
Line();
printf("是否继续输入通讯录信息(1表示继续,0表示停止,返回主菜单)\n");
// if(s->data.name==0)
// break;
scanf("%d",&flag); //总是自动跳过
Line();
// flag=Judge();
}
BackToMenu(); r->next=NULL;
return L;
}
/*int Judge() //判断是否继续输入学生通讯录
{
int i;
Line();
printf("是否继续输入通讯录信息(1表示继续,0表示停止,返回主菜单)\n");
scanf("%d",&i); //总是自动跳过
Line();
return i;
}*/
void Line()
{
printf("-----------------------------\n");
}
Lnode *SearchInformation(LinkList L)
{
char name[NAMESIZE];
Lnode *p;
Line();
printf("请输入需要查询学生的名字:\n");
Line();
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!=0)
p=p->next;
return p;
}
void Show(LinkList L) //此模块功能正常
{
Lnode *p;
p=head->next;
Line();
printf("姓名 电话\n");
Line();
while(p!=NULL)
{
printf("%s,%l",p->data.name,p->data.telNumber);
Line();
p=p->next;
}
BackToMenu();
}
void Exit()
{
exit(0);
}
int menu()
{
int count;
printf("班级学生通讯录\n");
Line();
printf("1.新增通讯录\n");
Line();
printf("2.查询某同学通讯录\n");
Line();
printf("3.显示所有人的通讯录信息\n");
Line();
printf("4.退出通讯录\n");
Line();
printf("请选择相应的数字进行操作\n");
Line();
scanf("%d",&count);
return count;
}
void Choice(int i)
{
switch(i)
{
case 1:
Line();
CreatList();
break;
case 2:
SearchInformation(head);
break;
case 3:
Show(head);
break;
case 4:
Exit();
}
}
void BackToMenu()
{
int i;
printf("是否返回主菜单:(1为是,其他为否)");
scanf("%d",&i);
if(i==1)
menu();
else
exit(1);
}
int main()
{
int i; //进行菜单选择操作
i=menu();
Choice(i);
return 0;
}
中间有句scanf("%d",&i); //总是自动跳过
为什么,求救
------解决方案--------------------
scanf("%d",&i); //Debug 单步到这里看看
------解决方案--------------------
google:VC单步调试
------解决方案--------------------
出现这种情况一般是输入缓冲区还有数据未读完。
可以在scanf之前清空缓冲区试试:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 200
#define NAMESIZE 20
void Line();
int Judge();
int menu();
void BackToMenu();
typedef struct
{
char name[NAMESIZE];
long telNumber;
}datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
LinkList head;
LinkList CreatList()
{
LinkList L=NULL;
Lnode *s,*r=NULL;
int flag=1;
int test;
// char name[NAMESIZE];
// scanf("%s",name);
while(flag)
{
s=(Lnode*)malloc(sizeof(Lnode));
if(L==NULL)
L=s;
else
r->next=s;
r=s;
Line();
printf("-------请----输----入---------\n");
printf("姓名 电话\n");
scanf("%s%l",s->data.name,s->data.telNumber);
Line();
printf("是否继续输入通讯录信息(1表示继续,0表示停止,返回主菜单)\n");
// if(s->data.name==0)
// break;
scanf("%d",&flag); //总是自动跳过
Line();
// flag=Judge();
}
BackToMenu(); r->next=NULL;
return L;
}
/*int Judge() //判断是否继续输入学生通讯录
{
int i;
Line();
printf("是否继续输入通讯录信息(1表示继续,0表示停止,返回主菜单)\n");
scanf("%d",&i); //总是自动跳过
Line();
return i;
}*/
void Line()
{
printf("-----------------------------\n");
}
Lnode *SearchInformation(LinkList L)
{
char name[NAMESIZE];
Lnode *p;
Line();
printf("请输入需要查询学生的名字:\n");
Line();
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!=0)
p=p->next;
return p;
}
void Show(LinkList L) //此模块功能正常
{
Lnode *p;
p=head->next;
Line();
printf("姓名 电话\n");
Line();
while(p!=NULL)
{
printf("%s,%l",p->data.name,p->data.telNumber);
Line();
p=p->next;
}
BackToMenu();
}
void Exit()
{
exit(0);
}
int menu()
{
int count;
printf("班级学生通讯录\n");
Line();
printf("1.新增通讯录\n");
Line();
printf("2.查询某同学通讯录\n");
Line();
printf("3.显示所有人的通讯录信息\n");
Line();
printf("4.退出通讯录\n");
Line();
printf("请选择相应的数字进行操作\n");
Line();
scanf("%d",&count);
return count;
}
void Choice(int i)
{
switch(i)
{
case 1:
Line();
CreatList();
break;
case 2:
SearchInformation(head);
break;
case 3:
Show(head);
break;
case 4:
Exit();
}
}
void BackToMenu()
{
int i;
printf("是否返回主菜单:(1为是,其他为否)");
scanf("%d",&i);
if(i==1)
menu();
else
exit(1);
}
int main()
{
int i; //进行菜单选择操作
i=menu();
Choice(i);
return 0;
}
中间有句scanf("%d",&i); //总是自动跳过
为什么,求救
------解决方案--------------------
scanf("%d",&i); //Debug 单步到这里看看
------解决方案--------------------
google:VC单步调试
------解决方案--------------------
出现这种情况一般是输入缓冲区还有数据未读完。
可以在scanf之前清空缓冲区试试:
- C/C++ code
fflush(stdin); scanf("%d",&i);