2017-06-01 5 views
0

Entschuldigung für die langen Codes iam noch neu zu c .. es passiert einfach immer wenn ich die Daten zurückgebe die Aktivitätsdaten haben immer 1 weitere Daten eingefügt, die mein Programm nicht reagieren lassen.Ghost-Ausgabe beim Anzeigen; Verschachtelte Liste [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); 
} 

// Menü 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; 
} 

// Insert 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); 
} 

// Anzeige

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 Erstellt von Asyraf Fuyu am 23/04/2017. Copyright fitnessCookie © 2017. Alle Rechte vorbehalten.

hier ist der Ausgang nach der Display-Ausgabe aus dem Menü, dass display output

Mitteilung ausgeführt wird: i nicht eingegeben hat, die mit roten Daten unterstrichen zuletzt.

wie funktioniert ein Eingang ein Smiley sowieso ..

+0

Beginnen Sie mit einem Debugger, um * wo * der Absturz auftritt. Überprüfen Sie dann, ob nicht initialisierte Variablen oder Strukturelemente vorhanden sind. Aber am wichtigsten ist, versuchen Sie nicht, das gesamte Programm auf einmal zu schreiben. Iterieren, schreiben Sie kleine Teile, Schritt für Schritt, testen Sie, ob es zwischen den einzelnen Schritten funktioniert. Ich empfehle auch, dass Sie lesen [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+0

Ich verwende Codeblocks, es ist mit einigen Debugging-Plugins eingebaut. Es war eine Woche, den Code neu zu schreiben und seine Struktur zu ändern, und ich denke, es ist eine Zeit, in der ich versuche, Hilfe von Profis zu finden. theres mehr Code, aber ich identifizierte den Unfall geschieht an der Anzeigenfunktion, wenn ich versuche, meine Aktivitätsstruktur anzuzeigen, ich verdächtige mein Einsatz oder Anzeige vielleicht falsch, aber ich stellte die Hauptmenüfunktion in Fall übersehen. –

+0

Uninitialize-Variable verwenden. 'ch' bei' while (ch! = 0) ',' newptr-> act' bei 'if (newptr-> act == NULL)' – BLUEPIXY

Antwort

0

Die Antwort von BLUEPIXY in einem Kommentar gegeben wurde:
Set NULL-newptr->act.

+0

"Ich weiß nicht, wie ich meine Frage als beantwortet markieren soll, erinnere mich daran, dass ich meine eigene Frage in 2 Tagen nicht beantworten kann", das ist nicht wichtig. – Stargateur

+0

Fragen werden als "beantwortet" behandelt, wenn sie eine Antwort haben, die Sie jetzt haben. Es gibt keinen Mechanismus, um dies direkt zu tun. – Yunnosch