标题:逐个添加结点的链表输出时忽然停止,求大佬指点
只看楼主
sherlocked13
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2020-4-5
结帖率:0
已结贴  问题点数:20 回复次数:4 
逐个添加结点的链表输出时忽然停止,求大佬指点
自定义了创建函数,add函数和输出函数,创建链表要求结点逐个添加,调用add,用y和n判断是否继续添加,如果录入Y,则开始或继续添加,录入数据之后,回车,n结束录入
主函数部分可确保没有问题
选择输出后,程序停止
请求大佬指教
参数:struct line *head是需要操作的链表

typedef struct line {
    char data;
    struct line *next;
} Node;

struct line *creat(struct line *head)          //创建
{

   struct line *tail;
   while(1)
   {
       char ch;
       printf("添加新的节点?(Y/N)\n");
       fflush(stdin);
       scanf ("%c",&ch);
       if ((ch=='Y')||(ch=='y'))
       {
           add(head);
       }
       else if ((ch=='N')||(ch=='n'))
        break;
       else break;
   }

}

struct line *add(struct line *head)          //接受单个字符
{
    struct line *p = NULL;
    struct line *pr = head;
    char data;
    p = (struct line *) malloc(sizeof(struct line));
    if (p == NULL) {
        printf("申请内存失败!\n");
        exit(0);
    }
    if (head == NULL) {
        head = p;
    } else {
        while (pr->next != NULL) {
            pr = pr->next;
        }
        pr->next = p;
    }
    pr = p;
    printf("输入数据:");
    scanf(" %c", &data);
    pr->data = data;
    pr->next = NULL;
    return head;
}


out(struct line *head)          //输出
{
    struct line *p = head->next;
    int i;
    p=head->next;
    if(p=NULL)
        printf("空链表!\n");
        while (p!=NULL) {
            printf("%c ", p->data);
            p= p->next;
        }
    printf("\n");

}
搜索更多相关主题的帖子: next NULL struct line head 
2020-04-05 19:32
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:10 
缺个等号

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-04-05 20:09
sherlocked13
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2020-4-5
得分:0 
回复 2楼 forever74
是输出函数里面的那个吗?
    if(head==NULL)
        printf("空链表!\n");
改了程序还是停止了
2020-04-05 20:14
sherlocked13
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2020-4-5
得分:0 
   g改成了 if(p==NULL)
        printf("空链表!\n");楼上写错了
2020-04-05 20:16
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:10 
creat 没有返回, add的返回没有使用

程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct line {
    char data;
    struct line *next;
} Node;

void clearStdin() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF) {};
}

struct line * add(struct line *head)          //接受单个字符
{
    struct line *p = NULL;
    struct line *pr = head;
    char data;
    p = (struct line *) malloc(sizeof(struct line));
    if (p == NULL) {
        printf("申请内存失败!\n");
        exit(0);
    }
    if (head == NULL) {
        head = p;
    }
    else {
        while (pr->next != NULL) {
            pr = pr->next;
        }
        pr->next = p;
    }
    pr = p;
    printf("输入数据:");
    scanf(" %c", &data);
    clearStdin();
    pr->data = data;
    pr->next = NULL;
    return head;
}




struct line * creat(struct line *head)          //创建
{
    
    while (1)
    {

        int ch;
        printf("添加新的节点?(Y/N)\n");
        ch = getchar();
        clearStdin();
        
        if ((ch == 'Y') || (ch == 'y'))
        {
            head = add(head);
            continue;
        }
        break;
    }
    return head;
}




void out(struct line *head)          //输出
{
    struct line *p = head;
    if (p == NULL)
        printf("空链表!\n");
    while (p != NULL) {
        printf("%c ", p->data);
        p = p->next;
    }
    printf("\n");

}

void main(void) {
    struct line * head = NULL;
    head = creat(head);
    out(head);
    free(head);
}


[此贴子已经被作者于2020-4-10 09:28编辑过]

2020-04-10 09:27



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




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

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