鱼C论坛

 找回密码
 立即注册
查看: 1194|回复: 2

[已解决]程序无法输出

[复制链接]
发表于 2019-11-20 15:13:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 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 ;
}
编译没有问题,但是不会输出;不知道什么问题;
最佳答案
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              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-20 17:05:27 | 显示全部楼层
jackz007 发表于 2019-11-20 16:34
void traverse_list(PNODE pHead)
. . . . . .
        while (p != NULL);

十分感谢;大神的指导;开始是把while放循环后面的;后面改放前面了,就忘了分号了;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 23:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表