cara_celia
2018-05-28 10:32
采纳率: 18.8%
浏览 677
已采纳

c语言链表显示出错 求大佬帮忙

选项6出错
图片说明
#include
#include
#include
#include

//定义全局变量
int isEmpty=0;//标志,判断链表是否为空

//!!!定义单链表结构体!!!
typedef struct Node{
int NUM;//类型总数
char NAME[100];//各类型名称
int num; //各类型下的货物总数
struct Node*next;
}Node;

//函数声明
Node*create(int n,Node*L);
Node*input(Node*L);
Node*output(Node*L);
Node*outnum(Node*L);
Node*outname(Node*L);
Node*current(Node*L);
void search(Node*L);
void print(Node*L);
void searchnum(Node*L);
void searchname(Node*L);
void display(int n,Node*L);
//========新增加的函数========
Node*append(Node*L);

//主函数
void main()
{
int x;
int n;//初次输入的大小
Node *L;
if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间
{
printf("\n");
exit(1);
}

printf("欢迎使用我的仓库管理系统!\n"); 
while(1)
{
    //主菜单开始 
    printf("==========================\n");
    printf("1.显示货物类型列表\n");
    printf("2.增加货物类型\n");
    printf("3.删除货物类型\n");
    printf("4.货物入库\n");
    printf("5.货物出库\n");
    printf("6.库存显示\n");
    printf("7.退出\n");
    printf("==========================\n");
    //主菜单结束
    printf("选择1-7:");
    scanf("%d",&x); 
    switch(x)
    {
        case 1:;break;
        case 2:printf("请输入最初的货物类型数量:\n");
               scanf("%d",&n);
               create(n,L);
               break;
        case 3:;break;
        case 4:;break;
        case 5:;break;
        case 6:display(n,L);break;
        case 7:;break;
        default:printf("input error!\nplaese input1-7");
    }       
}           

}

//函数
//1.创建链表节点
Node*create(int n,Node*L)
{
Node*pTail=L;
L->next=NULL;
Node*p;
p=(Node*)malloc(sizeof(Node));
if(p==NULL)
{
printf("申请内存空间失败!\n");
}

//利用尾插建立单链表
int i;
for(i=1;i<=n;i++)
{
printf("请输入第%d种类型编号:",i);
scanf("%d",&p->NUM);
printf("请输入第%d种类型名称:",i);
scanf("%s",&p->NAME);
printf("请输入第%d种类型库存:",i);
scanf("%d",&p->num);
putchar('\n');
pTail->next=p;
pTail=p;
}
p->next=NULL;
return L;
}
//2.增加货物类型
/*Node*append(Node*L)
{
Node*ptail=L;
L->next=NULL;
Node*p;
p=(Node*)malloc(sizeof(Node));
if(p==NULL)
{
printf("申请内存空间失败!\n");
}
else
{
printf("请输入新增加的类型编号:\n");
scanf("%d",&p->NUM);
printf("请输入第%d种类型名称:\n",i);
scanf("%s",&p->NAME);
printf("请输入第%d种类型库存:\n",i);
scanf("%d",&p->num);
while(p->NUM>)
{

    }
    pTail->next=p;
    pTail=p;
}
p->next=NULL;
}   

return L; 

} /
//货物显示函数
void display(int n,Node*L)
{
Node*p;
p=(Node
)malloc(sizeof(Node));
p=L->next;
int i=0;
//for(i=0;i //{
while(p!=NULL)
{
printf("第%d种类型名称:",&p->NUM);
printf("%s\n",&p->NAME);
printf("第%d种类型库存:",&p->NUM);
printf("%d\n",&p->num);
p=p->next;
//}
}

}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • threenewbee 2018-05-28 16:22
    已采纳
     // Q690422.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    //
    //int _tmain(int argc, _TCHAR* argv[])
    //{
    //  return 0;
    //}
    
    
    #include<stdio.h> 
    #include<stdlib.h>
    #include<string.h>
    #include<malloc.h>
    
    //¶¨ÒåÈ«¾Ö±äÁ¿
    int isEmpty=0;//±êÖ¾£¬ÅжÏÁ´±íÊÇ·ñΪ¿Õ 
    
    //£¡£¡!¶¨Òåµ¥Á´±í½á¹¹Ì壡£¡£¡ 
    typedef struct Node{
        int NUM;//ÀàÐÍ×ÜÊý 
        char NAME[100];//¸÷ÀàÐÍÃû³Æ 
        int num; //¸÷ÀàÐÍϵĻõÎï×ÜÊý
        struct Node*next;
    }Node;
    
    //º¯ÊýÉùÃ÷ 
    Node*create(int n,Node*L);
    Node*input(Node*L);
    Node*output(Node*L);
    Node*outnum(Node*L);
    Node*outname(Node*L);
    Node*current(Node*L);
    void search(Node*L);
    void print(Node*L);
    void searchnum(Node*L);
    void searchname(Node*L);
    void display(int n,Node*L);
    //========ÐÂÔö¼ÓµÄº¯Êý========
    Node*append(Node*L); 
    
    //Ö÷º¯Êý
    int main()
    {
        int x;
        int n;//³õ´ÎÊäÈëµÄ´óС 
        Node *L;
        if(!(L=(Node *)malloc(sizeof(Node)))) //·ÖÅä¿Õ¼ä
        {
        printf("\n");
        exit(1);
        }
    
        printf("»¶Ó­Ê¹ÓÃÎҵIJֿâ¹ÜÀíϵͳ£¡\n"); 
        while(1)
        {
            //Ö÷²Ëµ¥¿ªÊ¼ 
            printf("==========================\n");
            printf("1.ÏÔʾ»õÎïÀàÐÍÁбí\n");
            printf("2.Ôö¼Ó»õÎïÀàÐÍ\n");
            printf("3.ɾ³ý»õÎïÀàÐÍ\n");
            printf("4.»õÎïÈë¿â\n");
            printf("5.»õÎï³ö¿â\n");
            printf("6.¿â´æÏÔʾ\n");
            printf("7.Í˳ö\n");
            printf("==========================\n");
            //Ö÷²Ëµ¥½áÊø
            printf("Ñ¡Ôñ1-7:");
            scanf("%d",&x); 
            switch(x)
            {
                case 1:;break;
                case 2:printf("ÇëÊäÈë×î³õµÄ»õÎïÀàÐÍÊýÁ¿:\n");
                       scanf("%d",&n);
                       create(n,L);
                       break;
                case 3:;break;
                case 4:;break;
                case 5:;break;
                case 6:display(n,L);break;
                case 7:;break;
                default:printf("input error!\nplaese input1-7");
            }       
        }           
    } 
    
    
    
    
    
    //º¯Êý
    //1.´´½¨Á´±í½Úµã
    Node*create(int n,Node*L)
    {
        Node*pTail=L; 
        L->next=NULL;
        Node*p;
    
        //ÀûÓÃβ²å½¨Á¢µ¥Á´±í 
        int i;
        for(i=1;i<=n;i++)
        {
            p=(Node*)malloc(sizeof(Node));
            if(p==NULL)
            {
                printf("ÉêÇëÄÚ´æ¿Õ¼äʧ°Ü£¡\n");
            }   
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐͱàºÅ:",i);
            scanf("%d",&p->NUM);
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐÍÃû³Æ:",i);
            scanf("%s",&p->NAME);
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐÍ¿â´æ:",i);
            scanf("%d",&p->num);
            putchar('\n');
            pTail->next=p;
            pTail=p;
    
        }
        p->next=NULL;
        return L; 
    } 
    //2.Ôö¼Ó»õÎïÀàÐÍ
    /*Node*append(Node*L)
    {
        Node*ptail=L;
        L->next=NULL;
        Node*p;
        p=(Node*)malloc(sizeof(Node));
        if(p==NULL)
        {
            printf("ÉêÇëÄÚ´æ¿Õ¼äʧ°Ü£¡\n");
        }
        else
        {
            printf("ÇëÊäÈëÐÂÔö¼ÓµÄÀàÐͱàºÅ£º\n");
            scanf("%d",&p->NUM);
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐÍÃû³Æ:\n",i);
            scanf("%s",&p->NAME);
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐÍ¿â´æ:\n",i);
            scanf("%d",&p->num);
            while(p->NUM>)
            {
    
            }
            pTail->next=p;
            pTail=p;
        }
        p->next=NULL;
        }   
    
        return L; 
    
    } */
    //»õÎïÏÔʾº¯Êý
    void display(int n,Node*L)
    {
        Node*p;
        p=(Node*)malloc(sizeof(Node));
        p=L->next;
        int i=0;
        //for(i=0;i<n;i++)
        //{ 
        while(p!=NULL)
        {
            printf("the name of %d:",p->NUM);
            printf("%s\n",p->NAME);
            printf("the stock of %d:",p->NUM);
            printf("%d\n",p->num);
            p=p->next;
        //}
        }   
    }
    
    
    
    已采纳该答案
    打赏 评论
  • threenewbee 2018-05-28 10:40

    不要取地址,否则打印的是指针

     void display(int n,Node*L)
    {
        Node*p;
        p=(Node*)malloc(sizeof(Node));
        p=L->next;
        int i=0;
        //for(i=0;i<n;i++)
        //{ 
        while(p!=NULL)
        {
            printf("第%d种类型名称:",p->NUM);
            printf("%s\n",p->NAME);
            printf("第%d种类型库存:",p->NUM);
            printf("%d\n",p->num);
            p=p->next;
        //}
        }   
    }
    
    打赏 评论
  • threenewbee 2018-05-28 10:43

    图片说明

    这是运行结果,我的电脑是英文版,别的地方输出乱码你不要管。

    打赏 评论
  • threenewbee 2018-05-28 16:22

    你create里面,每个节点都要分配一次,否则后面的冲掉了前面的

        for(i=1;i<=n;i++)
        {
            p=(Node*)malloc(sizeof(Node));
            if(p==NULL)
            {
                printf("ÉêÇëÄÚ´æ¿Õ¼äʧ°Ü£¡\n");
            }   
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐͱàºÅ:",i);
            scanf("%d",&p->NUM);
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐÍÃû³Æ:",i);
            scanf("%s",&p->NAME);
            printf("ÇëÊäÈëµÚ%dÖÖÀàÐÍ¿â´æ:",i);
            scanf("%d",&p->num);
            putchar('\n');
            pTail->next=p;
            pTail=p;
    
        }
    

    请无视乱码,我电脑是英文系统。

    这次对了

    图片说明

    如果问题解决,麻烦及时采纳,方法是点我回答右边的采纳按钮。

    打赏 评论

相关推荐 更多相似问题