c语言链表中插入数据问题

c语言链表中插入数据问题,第1张

#include "stdio.h"

#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

printf("请输入学生学号:")

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

}

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

struct student

{

char num[20]//学号

char name[20]//用户姓名

char phone[20]//电话号码

char addr[100]//通讯地址

struct student *next

}

void insert(student* head)//添加一条记录

{

student *p=head

student *newStud=(student*)malloc(sizeof(student))

printf("输入添加用户信息\n")

printf("学号:")

scanf("%s",newStud->num)

printf("姓名:")

scanf("%s",newStud->name)

printf("电话:")

scanf("%s",newStud->phone)

printf("地址:")

scanf("%s",newStud->addr)

while(p->next!=NULL)

{

if(strcmp(p->num,newStud->num)==0)

{

printf("此学号的用户已存在!\n")

return

}

p=p->next

}

p->next=newStud

newStud->next=NULL

printf("添加成功\n")

}

void update(student *head)//修改一条记录

{

student *p=head->next

char num[20]

printf("输入待修改用户学号:")

scanf("%s",num)

while(p!=NULL)

{

if(strcmp(p->num,num)==0)

{

printf("输入修改后信息\n")

printf("学号:")

scanf("%s",&p->num)

printf("姓名:")

scanf("%s",&p->name)

printf("电话:")

scanf("%s",&p->phone)

printf("地址:")

scanf("%s",&p->addr)

printf("修改成功\n")

return

}

p=p->next

}

printf("不存在此学号的用户")

}

void delRecord(student *head) //删除一条记录

{

student *p1,*p2

p1=head

p2=p1->next

char num[20]

printf("输入待删除用户学号:")

scanf("%s",num)

while(p2!=NULL)

{

if(strcmp(p2->num,num)==0)//找到则删除此用户

{

p1->next=p2->next

free(p2)

printf("删除成功\n")

return

}

p1=p2//没找到则继续遍历

p2=p2->next

}

printf("不存在此学号的用户\n")

}

void findByNum(student *head)//按学号查找

{

student *p=head->next

char num[20]

printf("输入待查找用户学号:")

scanf("%s",num)

while(p!=NULL)

{

if(strcmp(p->num,num)==0)

{

printf("学号:%s\n",p->num)

printf("姓名:%s\n",p->name)

printf("电话:%s\n",p->phone)

printf("地址:%s\n",p->addr)

return

}

p=p->next

}

printf("不存在此学号的用户\n")

}

void findByName(student *head)//按姓名查找

{

student *p=head->next

char name[20]

printf("输入待查找用户姓名:")

scanf("%s",name)

while(p!=NULL)

{

if(strcmp(p->name,name)==0)

{

printf("学号:%s\n",p->num)

printf("姓名:%s\n",p->name)

printf("电话:%s\n",p->phone)

printf("地址:%s\n",p->addr)

return

}

p=p->next

}

printf("不存在此姓名的用户\n")

}

void main()

{

student *head=(student*)malloc(sizeof(student))

head->next=NULL

char choice

printf("\t*****************************\n")

printf("\t1,添加一条记录\n")

printf("\t2,修改一条记录\n")

printf("\t3,删除一条记录\n")

printf("\t4,按学号查找\n")

printf("\t5,按姓名查找\n")

printf("\t6,退出\n")

printf("\t请按键选择\n")

printf("\t*****************************\n")

while(true)

{

printf("请按键选择 *** 作:\n")

fflush(stdin)//清除缓冲区

choice=getch()

switch(choice)

{

case '1':

insert(head)

break

case '2':

update(head)

break

case '3':

delRecord(head)

break

case '4':

findByNum(head)

break

case '5':

findByName(head)

break

case '6':

exit(0)

default:

printf("输入错误\n")

}

}

}

你的num应该是char类型吧?

还有,name数组长度不用那么大啊,好浪费空间!

我测试了下,没什么问题,要是有什么问题可以hi我

#include

#include

# include "stdlib.h"

#define LEN sizeof(struct stu)

struct stu

{

long num

char name[20]

char sex

int age

char addr[30]

struct stu *next

}

int main()

{

int n

struct stu *head

struct stu *p1,*p2

head=(struct stu*)malloc (LEN)

head->next=NULL

p1=head

p2=(struct stu*)malloc (LEN)

p2->next=NULL

printf("学号\t姓名\t性别\t年龄\t住址\n")

scanf("%ld,\t%s,\t%c,\t%d,\t%s",&p2->num,&p2->name,&p2->sex,&p2->age,&p2->addr)

while(p2->num!=0)

{

p1->next=p2

p1=p2

fflush(stdin)

p2=(struct stu*)malloc (LEN)

printf("学号\t姓名\t性别\t年龄\t住址\n")

scanf("%ld,%s,%c,%d,%s",&p2->num,&p2->name,&p2->sex,&p2->age,&p2->addr)

}

}纯手打,希望采纳。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11957888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存