2017-06-01 11 views
0

長いコードを残念に思っています。私はまだCに新しい...私はデータを表示するたびに常にアクティビティデータが1つのデータが挿入されています。表示時にゴースト出力。ネストされたリンクされたリスト[C]

#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); 
} 

//メニューFUNC

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; 
} 

// FUNCによって作成された

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 fitnessCpCookie を挿入Asyraf Fuyu、23/04/2017に Copyright fitnessCookie©2017。全著作権所有。

がここに表示出力後の出力は display output

予告というメニューから実行されている:私は、最後の赤のデータで下線入力しませんでした。とにかく1つの入力スマイリーをどうするか

..

+0

まず、デバッガを使用してクラッシュが発生する場所を特定します。次に、初期化されていない変数または構造体メンバーがないかどうかをチェックします。しかし、最も重要なことは、プログラム全体を一度に書き込もうとしないことです。繰り返し、各ステップ間で動作することをテストしながら、その小さな部分をステップごとに記述します。また、[小さなプログラムのデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)もお読みになることをお勧めします。 –

+0

Iamはコードブロックを使用しています。これはいくつかのデバッグプラグインでビルドされています。コードを書き直してその構造を変えて一週間を過ごしたことがあります。私はその時を私が専門家から助けを求めようとしていると思います。 theresより多くのコードが私は私の活動構造を表示しようとすると、表示機能でクラッシュが発生したと私は思った私の挿入や表示が間違っているかもしれないが、私は見落とした場合のメインメニュー機能を置く。 –

+0

変数の初期化を使用しています。 'new(newptr-> act == NULL)'の 'newptr-> act'' – BLUEPIXY

答えて

0

答えはコメントでBLUEPIXYによって与えられた:
設定NULLnewptr->actに。

+0

"2日後に自分の質問に答えることができなくなったことを思い出させるように、私の質問に印を付ける方法はわかりません"、これは重要ではありません。 – Stargateur

+0

質問には回答があるときに「回答済み」と扱われます。それを直接行う仕組みはありません。 – Yunnosch

関連する問題