更新时间2019-12-23 07:27:50
#include <stdio.h>#include<stdlib.h>typedef struct boxnode{ int mima;//开箱密码 int x;//判断此箱是否有东西:若有则x为1,若无则x为0 struct boxnode *next; int y; //编号 }boxnode;//设置链表 结点
void initnode(boxnode *p); //初始化结点 void createbox(boxnode *p,int n); //前插法创建单链表 void wayone(int num,boxnode *pre);//存物品得密码 void waytwo(int num,boxnode *pre);//用密码取物品 void initnode(boxnode *p) { p=(boxnode *)malloc(sizeof(boxnode)); p->next=NULL; p->mima=1122; p->x=0; p->y=1; } void createbox(boxnode *p,int n) { boxnode *s; int i,m; for(i=0,m=1134;i<n;++i,m++) { s=(boxnode *)malloc(sizeof(boxnode)); s->mima=m; s->x=0; s->next=NULL; s->next=p->next; p->next=s; } }int main(){ int c,num; boxnode *p; initnode(p); printf("寄存箱总数"); scanf("%d",&num); createbox(p,num); do{ printf("1.投硬币 2.输密码 0.退出 请选择:"); scanf("%d", &c); switch (c) { case 1: wayone(num,p); break; case 2: waytwo(num,p); break; case 0: break; } printf(" ");//换行操作符 }while (c != 0);//当c等于0时退出循环 return 0;}void wayone(int num,boxnode *pre){ int i,b; boxnode *q; initnode(q); printf("请投币"); scanf("%d",&b); if(b==1) { if(num==0) printf("本柜已满"); else for(i=0;i<num;++i) if(q->x==0)//寻找空柜 { printf("编号:%d密码:%d",q->y,q->mima); q->x=1;//此柜已满 break; } if(q->x!=0) q=q->next; } } void waytwo(int num,boxnode *pre) { int c,i; boxnode *q; initnode(q); printf("请输入密码:"); scanf("%d",&c); for(i=0;i<num;++i) { if(q->mima==c) { printf("%d号寄存箱已开",q->y); q->x=0;//此柜已空 break; } else if(q->mima!=c&&i<num) q=q->next; else printf("密码错误"); } }
程序至少有一个致命错
你的在createbox中p没有初始化
修改