标题:求修改下面的程序段
只看楼主
sunxueguang1
Rank: 1
来 自:山西
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-3-23
结帖率:60%
已结贴  问题点数:20 回复次数:7 
求修改下面的程序段
是一个超市存包的小系统没有写完
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct node
{
    int num;
    int password;
    struct node *next;
}Node,*linklist;
Node *p;
linklist l1;

void creatnode(linklist l1)
{
   
    p=(linklist *)malloc(sizeof(Node));
    p->num=NULL;
    p->password=NULL;
    l1=p;
}
void insertnode(linklist l1)
{
    int i,j; Node *q;
    for(i=0;i<5;i++)
    {
        q->next=p->next;
        p->next=q;
    }
    p=p->next;
    for(j=0;j<5;j++)
    {
        p->num=j+1;
        p=p->next;
    }
}
int listlength(linklist l1)/*检查是否成功建立链表*/
{
    Node *p1;
    int j;
    p1=l1;
    j=0;
    while(p1->next!=NULL)
    {p1=p1->next;j++;}
    return j;
}
void printf1()
{
    printf("#######欢迎使用密码存储箱#######\n\n");
    printf("##          1.存包            ##\n\n");
    printf("##          2.取包            ##\n\n");
    printf("##          3.退出            ##\n\n");
    printf("################################\n");
    printf("请您从数字1~3中选择:\n");
}
main()
{
 int a,b;
 linklist l;
 printf1();
 scanf("%d",&a);
 switch(a)
 {
 case 1:
     printf("1.存包\n");break;
 case 2:
     printf("2.取包\n");break;
 case 3:
     printf("3.退出\n");break;
 default:
     printf("输入错误,请重新输入!");
 }
 b=listlength(l);//运行到此就无响应了
 printf("%d",b);
}
搜索更多相关主题的帖子: next password include 
2013-03-23 10:27
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
得分:7 
有算法思想没能说下不?我比较笨。不经常去超市的人,也不常用你说的那个,不嫌麻烦,给我说下吧

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-03-23 22:20
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
得分:7 
p=(linklist)malloc(sizeof(Node));
2013-03-23 22:44
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:7 
存在问题
1  b=listlength(l);//运行到此就无响应了

你上面那个函数式存值的吧,你调用的时候,l还没有初始化,这样是不可以吧 申请的指针带出来的
用指针的指针

2 void insertnode(linklist l1)
{
    int i,j; Node *q;
    for(i=0;i<5;i++)
    {
       q->next=p->next; // 这个指针是还没有初始化的,你用它的next ,不崩溃有点难了
        p->next=q;
    }
    p=p->next;
    for(j=0;j<5;j++)
    {
        p->num=j+1;
        p=p->next;
    }
}


我行我乐
我的博客:
http://blog.yuccn. net
2013-03-23 23:09
sunxueguang1
Rank: 1
来 自:山西
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-3-23
得分:0 
回复 2楼 不玩虚的
  1.顾客使用箱子的流程为“投一元硬币”--------“找到一个空箱子,同时产生密码”(系统完成)--------“打印密码,打开箱子”(系统完成)--------“取密码纸存包,并关闭箱子,入超市购物”--------“购物结束”--------“输入密码”--------“找到对应箱子并打开”(系统完成)--------“取包”。
   2.现要求设计程序模拟以上系统完成的功能
      ①界面:在我们的模拟系统中,箱子在屏幕上被画出来,并编号,空箱为蓝色,被使用时变成红色,再变为空后则恢复蓝色;
    ②通过按“1”键模拟顾客投币;
    ③当空箱子被顾客申请得到的同时,系统自动生成6位数密码,此密码不能与正在被使用的任何一个箱子的密码相同。
  3.设计分析
    在设计时,可利用链表来组织所有的箱子,所有的箱子以结点的形式表示,结点中存放箱号、密码(满箱有,空箱无)以及指向下一个结点的指针。空箱结点放在一个链表1中,满箱结点放在另一个链表2中。
    若有顾客投币(这里按下“1”键模拟),查看链表1是否为空,若为空,则显示“箱满,请稍侯!”,若非空,则取出一个结点,随机产生一个六位数密码,并将些密码和链表2中所有结点的密码相比较,若有重复,则再随机产生一个新密码,直到无重复;将密码信息写入此结点,并将其插入链表2;将此箱的颜色改为红色。
  4.密码箱的存储结构类型定义
    typedef struct node
    {  int num;/*箱子的号码*/
       int password;/*箱子的密码(满箱有,空箱无)*/
       struct node *next;/*指向下个结点的指针*/
     }Node,*LinkList;
2013-03-24 09:53
sunxueguang1
Rank: 1
来 自:山西
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-3-23
得分:0 
回复 4楼 yuccn
谢谢高手!我自己来修改一下。。。
2013-03-24 09:55
sunxueguang1
Rank: 1
来 自:山西
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-3-23
得分:0 
回复 3楼 逆风而前
谢谢,这儿确实也存在问题!修改了一下正确了。
2013-03-24 10:06
sunxueguang1
Rank: 1
来 自:山西
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-3-23
得分:0 
回复 4楼 yuccn
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct node
{
    int num;
    int password;
    struct node *next;
}Node,*linklist;
Node *p;
linklist l1;
void creatnode(linklist l1);
int creatsecret();
int listlength(linklist l1);
void printf1()
{
    printf("#######欢迎使用密码存储箱#######\n\n");
    printf("##          1.存包            ##\n\n");
    printf("##          2.取包            ##\n\n");
    printf("##          3.退出            ##\n\n");
    printf("################################\n");
    printf("请您从数字1~3中选择:\n");
}
main()
{
 int a,b;
 linklist l;
 printf1();
 scanf("%d",&a);
 switch(a)
 {
 case 1:
     printf("1.存包\n");break;/*调用函数*/
 case 2:
     printf("2.取包\n");break;/*调用函数*/
 case 3:
     printf("3.退出\n");break;/*调用函数*/
 default:
     printf("输入错误,请重新输入!");
 }
 l=l1;/*修改过的,怀疑这个初始化有问题,但是不知道怎么改*/
b=listlength(l);
 printf("%d",b);
}
void creatlist(linklist l1)/*创建一个新链表*/
{
    int i,j; Node *q;
    p=(linklist)malloc(sizeof(Node));/*创建新结点warning C4047: '=' : 'struct node *' differs in levels of indirection from 'struct node ** '*/
    /*p->num=NULL;
    p->password=NULL;这儿存在问题*/
    l1=p;
    q=(linklist)malloc(sizeof(Node));/*修改过的*/
    for(i=0;i<5;i++)/*插入5个节点*/
    {
        q->next=p->next;
        p->next=q;
    }
    p=p->next;
    for(j=0;j<5;j++)
    {
        p->num=j+1;
        p=p->next;
    }
}
int creatsecret()/*产生六位新密码*/
{
    int i,array[6],a;
    srand(time(NULL));
    for(i=0;i<6;i++)
    {
        array[i]=rand()%10;
    }
    a=array[6];
    return a;
}
int listlength(linklist l1)/*检查是否成功建立链表*/
{
    Node *p1;
    int j;
    p1=l1;
    j=0;
    while(p1->next!=NULL)
    {p1=p1->next;j++;}
    return j;
}
还是运行崩溃。
2013-03-24 10:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-401653-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.086321 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved