抱歉,代码很长,我对 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 。保留所有权利。
注意:我没有输入最后一个带有红色下划线的数据。
无论如何,一个人如何输入一个笑脸..
最佳答案
BLUEPIXY 在评论中给出了答案:
将 NULL
设置为 newptr->act
。
关于c - 显示时有鬼影输出;嵌套链表 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298285/