c - 显示时有鬼影输出;嵌套链表 [C]

标签 c struct linked-list

抱歉,代码很长,我对 c 还很陌生。每当我显示数据时,就会发生这种情况,事件数据总是插入 1 个以上的数据,这使得我的程序无法响应。

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

struct activity{
    int reps, calBurn;
    char aName[30];

    struct activity *ptrnexto;
};

struct activity *newptro, *curptro, *prevptro;

struct plan {
    char pName[30], focus;
    int recWieght;

    struct plan *ptrnext;
    struct activity *act;
};

struct plan *headptr, *newptr, *curptr, *prevptr;

int menu(int num);
int insertPlan ();
int displayPlans ();

int main()
{
    menu(1);
}

//菜单功能

int menu(int no)
{
    int choice;
    if (no==0){
        return 0;
    }
    while(no==1)
    {
        system("cls");
        printf("\n");
        printf("\t\t\t\t   Welcome!\n");
        printf("\t\t\t   Input a new fitness plan\t [1]\n"
               "\t\t\t   View ALL fitness plan\t [5]\n");
        printf("\n\t\t\t          -----------\n ");
        printf("\t\t\t   Choice: ");
        scanf("%d",&choice);
        fflush(stdin);
        system("cls");
        switch(choice)
        {
            case 1:
            {
                insertPlan ();
                break;
            }
            case 5:
            {
                displayPlans ();
                return 0;
                break;
            }
            default:
            {
                printf("Invalid key entry.");
                break;
            }

        }//end switch
        printf("\n\tDo you wish to return to menu?\n"
               "\tYes[1]\t\tNo[0]\n\t");
        printf("-->  ");
        scanf("%d",&no);
        return menu(no);
    }
    return 0;
}

//插入函数

int insertPlan ()
{

    int pos=0,ch;
    newptr = (struct plan*)malloc(sizeof(struct plan));

    printf("\n Recomended Wieght : ");
    scanf(" %d",&newptr->recWieght);
    printf("\n Plan Name : ");
    scanf(" %s",&newptr->pName);
    printf("\nUpperBody(U)--LowerBody(L)--Abdomen(A)--Stamina(S) \nPlan Focus : ");
    scanf(" %c",&newptr->focus);
    printf("\n Put in the plans : ");
    while(ch!=0)
    {
        newptro= (struct activity*)malloc(sizeof(struct activity));
        pos = pos +1;
        printf("\nInsert in actvity %d",pos);
        printf("\n Activity Name : ");
        scanf("%s",&newptro->aName);
        printf("\n how many reps : ");
        scanf("%d",&newptro->reps);
        printf("\n estimated calory burn : ");
        scanf("%d",&newptro->calBurn);

        if (newptr->act==NULL)
        {
            newptr->act=newptro;
            newptro->ptrnexto=NULL;
        }
        else
        {
            newptro->ptrnexto=newptr->act;
            newptr->act=newptro;
        }
        printf("\n\tIs there anymore plans?\n"
               "\tYes[1]\t\tNo[0]\n\t");
        scanf("%d",&ch);
    }


    if (headptr==NULL)
    {
        headptr=newptr;
        newptr->ptrnext=NULL;
    }
    else
    {
        newptr->ptrnext=headptr;
        headptr=newptr;
    }
    return
 menu(1);
}

//显示

int displayPlans ()
{
    int pos=0;
    if (headptr==NULL)
        printf("EMPTY LIST");
    else
    {
        curptr=headptr;
        while(curptr!=NULL)
        {
            pos=pos +1;
            printf("\n%d -%s \n",pos, curptr->pName);
            curptro=curptr->act;

            while(curptro!=NULL)
            {
                printf(" #%s --> %d", curptro->aName, curptro->reps);
                curptro=curptro->ptrnexto;
            }
            curptr=curptr->ptrnext;
        }
    }
}

fitnessCookie.c 健身CpCookie 由 Asyraf Fuyu 于 2017 年 4 月 23 日创建。 版权所有fitnessCookie© 2017 。保留所有权利。

这是从菜单运行显示输出后的输出 display output

注意:我没有输入最后一个带有红色下划线的数据。

无论如何,一个人如何输入一个笑脸..

最佳答案

BLUEPIXY 在评论中给出了答案:
NULL 设置为 newptr->act

关于c - 显示时有鬼影输出;嵌套链表 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298285/

相关文章:

C:将文本文件读入结构数组

c++ - 传递由 glDrawElementsIndirect 使用的间接绘图命令时,如何确保 C++ 和 OpenGL 之间的正确结构字段对齐?

c - 分配新值时出现未处理的异常?

c - 我编写了一个简单的函数来递归地反转链表。它返回更新后的头指针

c - 从c中的文本文件中读取矩阵

检查 C 中的字符

c - 如何将 SQLite 数据库中的数据显示到 GTK TreeView 中?

c - 3d 空间中 n 个最近邻的 knn 实现

java - 如何在java中打乱链表

c - C中指针的大小