
#include "stdlib.h"
#include "string.h"
typedef struct
{
int num
char name[10]
int grade
}student
typedef struct node
{
student date
struct node *next
}*link
link head = NULL
student creat(void)
{
student p
setbuf(stdin,(char *)0)
scanf("%d",&p.num)
printf("请输入学生名字:")
setbuf(stdin,(char *)0)
scanf("%s",p.name)
printf("请输入学生成绩:")
setbuf(stdin,(char *)0)
scanf("%d",&p.grade)
return p
}
void insert(student date)
{
link p = (struct node*)malloc(sizeof *p)
p->date=date
p->next=head
head=p
}
void output(void)
{
link p = head
printf("|----学号-----姓名-------成绩--|\n")
while(p!=NULL)
{
printf("|%-9d%-11s%-6d|\n",p->date.num,p->date.name,p->date.grade)
p=p->next
}
printf("|------------------------------|\n")
}
void init(void)
{
puts("*************欢迎使用信息查询系统*************")
puts("*\t+-------------------------+*")
puts("*\t| 1.添加记录|*")
puts("*\t| 2.显示所有记录|*")
puts("*\t| 0.保存退出|*")
puts("*\t+-------------------------+*")
puts("********************************************")
printf("\t请输入您的选择:")
}
int main()
{
int n
char cmd[10]
do{
//system("cls")
men:init()
setbuf(stdin,(char *)0)//清空输入流
scanf("%[^\n]",cmd)//接受除换行以外的所有字符存入cmd中,并加上'\0'标志
sscanf(cmd,"%d",&n)
/*处理当命令不符合条件的情况*/
if(strlen(cmd) != 1 || n <0 || n >2 || !(*cmd >= '0' &&*cmd <= '2'))
{
printf("\t输入错误或没有这个选项!")
getchar()
getchar()
goto men
}
switch(n)
{
case 1:insert(creat())puts("\t添加成功!")break
case 2:output()break
case 0: return 0
default :break
}
printf("\tPress Enter To Continue!")
getchar()
getchar()
}while(n != 0)
return 0
}
你这样做,可以在插入前提前验证pos值有效性,减少无用的循环次数,比上面代码好。len可以定义成全局变量,在每次插入时累加,这样计算len的函数也可以省略。当然上面两个函数只限于以节点个数为条件插入。如果是以节点成员值为条件插入,还是要循环比较的。(比如学生结点,在某位学生后面插入,那么就要循环比较姓名或学号)。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)