2016-09-23 2 views
0

Ich kann diese Funktion nicht richtig ausführen. Es stürzt ab, wenn ich versuche, einen bestimmten Datensatz zu löschen. Was muss ich ändern, damit es wie erwartet funktioniert?Löschen eines einzelnen Schülers aus der verknüpften Liste

//Delete Students Function 
void delete_single_Student(Student *pfirst, int id) 
{ 
    int search_id; 
    bool found = false; 

    Student *pcurrent = pfirst; 
    Student *temp = NULL; 


    printf("Please enter the student ID of the student that will be deleted.\n"); 
    scanf("%d", &search_id); 

     while (search_id < 999 || search_id > 9999) 
     { 
      printf("\nPlease enter a valid id.\n"); 
      scanf("%d", &search_id); 
     } 
      do 
      { 
       temp = pcurrent; 
       pcurrent = pcurrent->next; 

       if (pfirst->id == search_id) 
       { 
        found == true; 
        printf("**********************\n\n"); 
        printf(" Student %d Deleted \n\n", search_id); 
        printf("*********************\n\n"); 
        pfirst = pfirst->next; 
        free(temp); 
        break; 
       } 

      } while (found != true); 
} 
+0

was machst du mit 'temp'? Was passiert mit der Flagge? – t0mm13b

+0

Wofür ist 'id'? – melpomene

+0

Verwenden Sie 'scanf' nicht für Benutzereingaben. – melpomene

Antwort

1

Beachten Sie, dass Sie abfragen pfirst, aber sie ändern sich in der Schleife nicht generell pfirst. Die Bedingung ist nur wahr, wenn das erste Element Ihr Ergebnis ist. Darüber hinaus ist found! = True immer wahr, so dass Sie nach dem Durchlaufen der Liste und dem Verweis auf purrrent-> next, bombardiert werden müssen.

Ich würde vorschlagen, dass Sie inkrementell mit einfacheren Problemen angreifen.

1) Schreiben Sie einfach eine Prozedur zum Drucken jedes Elements, die endet, wenn der Zeiger Null ist. Sie brauchen keine gefundene Variable.

2) Wiederholen Sie die Nummer 1, aber drucken Sie dieses Element Seite an Seite mit seinem Vorgänger, so dass Sie das vorherige Element verfolgen müssen.

3) Nachdem Sie # 2 gemeistert haben, sehen Sie, dass das erste Element ein Sonderfall ist und Sie das Problem nicht wirklich lösen können, ohne auf die Informationen der aufrufenden Funktion zugreifen zu müssen.

+0

Dies ist, was ich jetzt bekomme- Student ID: 529424 (war 4444) Name: Vorname: Alter: 31 – Ellejota

Verwandte Themen