In verketteter Liste eine eingegebene Artikelnummer auf schon vorhandensein prüfen



  • Hallo,

    bin dabei eine Lagerverwaltung als verkettete Liste zu schreiben. Dabei möchte ich nun eine Fehlermeldung raus geben, wenn eine Artikelnummer eingegeben wird, die schon vorhanden ist. Mein Code sieht so aus:

    Struktur

    //Struktur anlegen
    struct daten {
    	long int artikelnr;
    	char name[20];
    	float preis;
    	long int anzahl;
    	struct daten *next;			//Zeiger der Struktur
    };
    
    //Zeiger anlegen
    struct daten *head = NULL;		//Kopfzeiger
    
    struct daten *neu = NULL;		//Zeiger, um Daten neu einzufügen
    
    struct daten *aktuell = NULL;	//Zeiger, um durch Liste zu laufen
    

    Und hier der Teil der Funktion, der nicht funktioniert

    void hinzufuegen()
    {
    neu = (daten*)malloc(sizeof(struct daten));				
    neu ->next = head;			
    head = neu;						
    
    printf("Bitte geben Sie eine Artikelnummer ein: ");		
    scanf("%ld", &head -> artikelnr);				
    
    //ab hier kommt jetzt der Teil der nicht funktioniert
    
    if(head != NULL)		
    {
    	aktuell = head;						
    	while(aktuell != NULL)						{
    	if(aktuell->artikelnr==head -> artikelnr)				    {
    	       printf("Artikelnummer schon vorhanden!\n");
    	       printf("Bitte geben Sie eine neue Nr. ein:\n");
    	       scanf("%ld", &head -> artikelnr);					break;							    }
    	aktuell = aktuell->next;						}																					
    }
    
    }
    

    Das Problem ist, dass sobald ich eine Eingabe mache, die Ausgabe kommt, dass die Artikelnummer schon vorhanden ist. Dabei ist es egal, dass die Liste leer ist oder es diese Nummer nicht gibt. Ich weiß, dass es daran liegt, dass der Head - Zeiger ungleich Null ist, sobald ich etwas eingebe, aber ich weiß nicht, wie ich dieses Problem lösen kann.

    Vielen Dank für eure Hilfe!



  • Hi,
    du schreibst den Wert, nach dem gesucht wird, selbst in die Liste rein.
    Kein Wunder, das er gefunden wird, ne.
    Nimm eine separate Variable für die Abfrage.



  • Danke für die Antwort.
    Hab den Fehler nach nochmaligem selber austüfteln behoben.

    Trotzdem danke!


Anmelden zum Antworten