注意:perror函数用来将上一个函数发生错误的原因输入到标准设备(stderr)。
while(a(a = getchar()) != EOF && a != ‘\n’); 清除缓存。
fflush(stdin);也起到清除缓存的作用。
题目:创建两个学生链表,含有姓名、年龄的信息,一个链表存放男生,一个链表存放女生
#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
char name[30];
struct node * next;
};
typedef struct node Node;
typedef struct node* Link;
void create_node(Link *new_node)
{
*new_node = (Link)malloc(sizeof(Node));
if(*new_node == NULL)
{
printf("malloc error!\n");
exit(-1);
}
}
void create_link(Link *head)
{
create_node(head);
(*head)->next = *head;
}
void insert_node_tail(Link head,Link new_node)
{
Link p;
p = head;
while(p->next != head)
{
p = p->next;
}
p->next = new_node;
new_node->next = head;
}
void display_link(Link head)
{
Link p;
if(head == NULL)
{
printf("no such link!\n");
return;
}
p = head->next;
if(p == NULL)
{
printf("link is empty!\n");
return;
}
while(p != head)
{
printf("%s\n",p->name);
printf("%d\n",p->num);
p = p->next;
}
}
int main()
{
Link boy = NULL;
Link girl = NULL;
Link b = NULL;
Link g = NULL;
int i;
create_link(&boy);
create_link(&girl);
for(i = 1;i < 3;i++)
{
create_node(&b);
create_node(&g);
printf("第%d个男生姓名:",i);
scanf("%s",&b->name);
printf("第%d个男生年龄:",i);
scanf("%d",&b->num);
printf("第%d个女生姓名:",i);
scanf("%s",&g->name);
printf("第%d个女生年龄:",i);
scanf("%d",&g->num);
insert_node_tail(boy,b);
insert_node_tail(girl,g);
}
display_link(boy);
display_link(girl);
return 0;
}
通讯录
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct address
{
int qq; //QQ号
int tel; //号码
char name[30]; //姓名
char address[100]; //住址
int age; //年龄
char sex[5]; //性别
struct address * next;
};
typedef struct address Add;
typedef struct address* Link;
void menu()
{
printf("**********Welcome**********\n");
printf("***********Menu************\n");
printf("1*******增加联系人*********\n");
printf("2*******删除联系人*********\n");
printf("3*******查找联系人*********\n");
printf("4*******显示联系人*********\n");
printf("5*******清空联系人*********\n");
printf("0**********退出************\n");
}
void create_node(Link *node)
{
*node = (Link)malloc(sizeof(Add));
if(*node == NULL)
{
printf("malloc error!\n");
exit(-1);
}
}
void create_link(Link *head)
{
create_node(head);
(*head)->next = NULL;
}
void insert_node_tail(Link head,Link node)
{
Link p;
if (!head)
{
perror("insert_node_tail");
exit(-1);
}
p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = node;
node->next = NULL;
}
void add_linkman(Link head) //增加联系人
{
char c = 0;
char a;
Link temp = head;
do
{
Link p = NULL;
create_node(&p);
//fflush(stdin);
while ((a = getchar()) != EOF && a != '\n'); //清除缓存
printf("输入联系人姓名:");
scanf("%s",&p->name);
printf("\n");
printf("输入联系人性别:");
scanf("%s",&p->sex);
printf("\n");
printf("输入联系人年龄:");
scanf("%d",&p->age);
printf("\n");
printf("输入联系人电话:");
scanf("%d",&p->tel);
printf("\n");
printf("输入联系人QQ:");
scanf("%d",&p->qq);
printf("\n");
printf("输入联系人地址:");
scanf("%s",&p->address);
printf("\n");
insert_node_tail(temp,p);
printf("是否继续添加(y/n):");
while ((c = getchar()) != EOF && c != '\n');
c = getchar();
printf("c:%c\n", c);
}while(c == 'y');
}
void delete_linkman(Link head) //删除联系人
{
char c = 0;
Link p,q;
p = q = head->next;
do
{
char a[30];
printf("输入要删除的联系人姓名:");
scanf("%s",a);
printf("\n");
while(p != NULL && strcmp(a,p->name) != 0)
{
q = p;
p = p->next;
}
if(p)
{
q->next = p->next;
free(p);
}
else
{
printf("要删除的联系人不存在!\n");
}
printf("是否要继续删除联系人(y/n):");
// getchar();
c = getchar();
}while(c == 'y');
}
void search_linkman(Link head) //查找联系人
{
char c = 0;
Link p;
p = head->next;
do
{
char a[30];
printf("输入要查找的联系人姓名:");
scanf("%s",a);
printf("\n");
while(p != NULL && strcmp(a,p->name) != 0)
{
p = p->next;
}
if(p)
{
printf("姓名:%s\n",p->name);
printf("性别:%s\n",p->sex);
printf("年龄:%d\n",p->age);
printf("地址:%s\n",p->address);
printf("电话:%d\n",p->tel);
printf("QQ:%d\n",p->qq);
}
else
{
printf("所查找联系人不存在!\n");
}
printf("是否继续查找(y/n):");
c = getchar();
}while(c == 'y');
}
void display_linkman(Link head) //显示联系人
{
Link p;
if(head == NULL)
{
printf("通讯录不存在!\n");
return;
}
p = head->next;
if(p == NULL)
{
printf("无联系人!\n");
return;
}
while(p != NULL)
{
printf("姓名:%s\n",p->name);
printf("性别:%s\n",p->sex);
printf("年龄:%d\n",p->age);
printf("地址:%s\n",p->address);
printf("电话:%d\n",p->tel);
printf("QQ:%d\n",p->qq);
p = p->next;
}
}
void release_linkman(Link head) //清空联系人
{
Link p;
p = head->next;
while(head->next != NULL)
{
head->next = head->next->next;
free(p);
p = head->next;
}
display_linkman(head);
}
int main()
{
Link head = NULL;
create_link(&head);
int choice;
menu();
while(1)
{
printf("请输入要进行的操作:\n");
scanf("%d",&choice);
switch(choice)
{
case 0:
printf("欢迎下次使用!\n");
return 0;
break;
case 1:
add_linkman(head); //增加联系人
break;
case 2:
delete_linkman(head); //删除联系人
break;
case 3:
search_linkman(head); //查找联系人
break;
case 4:
display_linkman(head); //显示联系人
break;
case 5:
release_linkman(head); //清空联系人
break;
default:
printf("输入有误!重新输入!\n");
break;
}
}
return 0;
}
结果:
[root@bogon work]# ./address_book
**********Welcome**********
***********Menu************
1*******增加联系人*********
2*******删除联系人*********
3*******查找联系人*********
4*******显示联系人*********
5*******清空联系人*********
0**********退出************
请输入要进行的操作:
4
无联系人!
请输入要进行的操作:
1
输入联系人姓名:wyf
输入联系人性别:boy
输入联系人年龄:21
输入联系人电话:123456
输入联系人QQ:1123456
输入联系人地址:taixin
是否继续添加(y/n):y
c:y
输入联系人姓名:wfx
输入联系人性别:boy
输入联系人年龄:21
输入联系人电话:15251341714
输入联系人QQ:1151864949
输入联系人地址:nantong
是否继续添加(y/n):y
c:y
输入联系人姓名:lx
输入联系人性别:boy
输入联系人年龄:21
输入联系人电话:456789
输入联系人QQ:1234456
输入联系人地址:nantong
是否继续添加(y/n):n
c:n
请输入要进行的操作:
4
姓名:wyf
性别:boy
年龄:21
地址:taixin
电话:123456
QQ:1123456
姓名:wfx
性别:boy
年龄:21
地址:nantong
电话:2147483647
QQ:1151864949
姓名:lx
性别:boy
年龄:21
地址:nantong
电话:456789
QQ:1234456
请输入要进行的操作:
0
欢迎下次使用!