谁能不死 发表于 2019-11-20 15:13:49

程序无法输出

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

#define LEN sizeof(struct Node)

typedef struct Node
{
        int data;
        struct Node * pNext;
}NODE, *PNODE;

PNODE create_list(void);
void traverse_list(PNODE);

int main(void)
{
        PNODE pHead = NULL;

        pHead = create_list();
       
        traverse_list(pHead);

        return 0;
}

PNODE create_list(void)
{
        int i, len, val;

        PNODE pHead = (PNODE) malloc( LEN);
    if (pHead == NULL)
        {
                printf("内存分配失败,程序终止!");
                exit(-1);
        }
        PNODE pTail = pHead;
        pTail->pNext = NULL;

        printf("请你输入需要生产链表节点的个数:len = ");
    scanf("%d", &len);

        for (i=0; i<len; ++i)
        {
                printf("请你输入第%d个节点的值: ", i+1);
                scanf("%d", &val);

                PNODE pNew = (PNODE)malloc( LEN);
                if (pNew == NULL)
                {
                printf("内存分配失败,程序终止!");
                exit(-1);
                }
                pNew->data = val;
                pTail->pNext = pNew;
                pNew->pNext = NULL;
                pTail = pNew;
        }       
       
        return pHead;

}

void traverse_list(PNODE pHead)
{
        PNODE p = pHead->pNext;
       
        while (p != NULL);
        {
       printf("%d\n", p->data);
       p = p->pNext;
        }
        printf("\n");

        return ;
}
编译没有问题,但是不会输出;不知道什么问题;

jackz007 发表于 2019-11-20 16:34:29

本帖最后由 jackz007 于 2019-11-20 16:39 编辑

void traverse_list(PNODE pHead)
. . . . . .
      while (p != NULL);

       问题就是 while 语句后面多写了一个分号,把它删掉就好了。

       楼主的代码首节点无用,我改写了一下,稍微节省一点空间:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
      int data            ;
      struct Node * pNext ;
}NODE , * PNODE             ;

PNODE create_list(void)
{
      int i , len , val                                          ;
      PNODE pHead, p , q                                       ;
      pHead = NULL                                                 ;
      printf("请你输入需要生产链表节点的个数:")                   ;
      scanf("%d", & len)                                           ;
      if(len > 0) {
                for(i = 0 ; i < len ; i ++) {
                        printf("请你输入第%d个节点的值: ", i + 1)    ;
                        scanf("%d" , & val)                        ;
                        if ((p = (PNODE) malloc(sizeof(struct Node)))) {
                              p -> data = val                      ;
                              p -> pNext = NULL                  ;
                              if(! i) pHead = p                  ;
                              else q -> pNext = p                  ;
                              q = p                              ;
                        } else {
                              fprintf(stderr , "\n")               ;
                              fprintf(stderr , "Error:malloc()\n") ;
                              fprintf(stderr , "\n")               ;
                              break                              ;
                        }
                }
      }
      return pHead                                                 ;
}

void traverse_list(PNODE pHead)
{
      PNODE p                                                      ;
      for(p = pHead ; p ; p = p -> pNext) printf("%d\n" , p -> data) ;
      printf("\n")                                                   ;
}

int main(void)
{
      PNODE pHead = NULL    ;
      pHead = create_list() ;
      traverse_list(pHead);
      return 0            ;
}

谁能不死 发表于 2019-11-20 17:05:27

jackz007 发表于 2019-11-20 16:34
void traverse_list(PNODE pHead)
. . . . . .
      while (p != NULL);


十分感谢;大神的指导;开始是把while放循环后面的;后面改放前面了,就忘了分号了;
页: [1]
查看完整版本: 程序无法输出