Zum Inhalt springen

dringende Anfängerhilfe verkettete Liste


Empfohlene Beiträge

Geschrieben

Hallo Community,

bin so ziemlich verzweifelt und weiß echt nicht mehr weiter, deshalb versuche ich mal hier Hilfe zu finden.

Die Aufgabenstellung die ich machen muss ist eigentlich einfach, aber für mich fast ein Ding der Unmöglichkeit. :(

Es geht um eine einfach verkettete Liste. Und zwar soll man eine "Einkaufslistenverwaltung" Programmieren.

Die Aufgabenstellung findet man im Anhang.

Habe es anhand eines Buchs und mit Internetrecherche zu lösen, aber nach nun 4h weiß ich einfach nicht mehr weiter.

Natürlich poste ich auch das, was ich bis jetzt geschrieben habe.

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


struct elem {

 char name[20];

 int anzahl;

 int kategorie;

 struct elem *next;

};




int main(void) {

    int anzahl;

    int kategorie;

    struct elem

    *anfang = NULL, *cursor;

    char name[20];



    while (1) {

        printf("\nProdukt:");

        fgets(name, 20, stdin);

        printf("\nAnzahl:");

        scanf("%d", &anzahl);

        printf("\nKategorie:");

        scanf("%d", &kategorie);


        if (strlen (name) == 1 , anzahl == 1 , kategorie == 1)

                    break;


        cursor =malloc(sizeof(struct elem));


        if (cursor == NULL) {

            printf("Speicherplatzmangel\n");

            exit(1);

            }


        strcpy(cursor -> name, name);

        cursor -> next = anfang;

        anfang = cursor;

        }


printf("Ausgabe");

while(cursor!=NULL) {

    printf("%s", cursor -> name);

    cursor = cursor -> next;

    }


    return 0;

}

Ich hoffe ihr könnt mir Laien sagen, wo ich den Fehler gemacht habe. Wahrscheinlich habe ich so viele Fehler gemacht, dass euch übel wird.

Hoffe echt auf eure Hilfe.

-Capatcha

post-66692-14430448525763_thumb.jpg

Geschrieben

Ich hoffe ihr könnt mir Laien sagen, wo ich den Fehler gemacht habe. Wahrscheinlich habe ich so viele Fehler gemacht, dass euch übel wird.

So schlecht ist der Code gar nicht. Aufgabenteil b und c fehlen halt völlig.

if (strlen (name) == 1 , anzahl == 1 , kategorie == 1)

Diese Abbruchbedingung ist Käse. Du benutzt hier den Kommaoperator, und der gibt einfach nur den Wert des rechten Operanden zurück, in diesem Fall also kategorie == 1. Die anderen Bedingungen werden zwar auch geprüft, das Ergebnis wird durch den Kommaoperator aber quasi weggeworfen. Wenn du diese Bedingungen verknüpfen willst, benutz || oder &&.

Wenn du scanf und fgets mischst, solltest du beachten, dass fgets den Zeilenumbruch, den scanf im Puffer lässt, als Endmarkierung betrachtet.

Geschrieben

Hi, danke für die schnelle Hilfe.

Stimmt, die Abbruchbedingung ist Schwachsinn.

Vor allem, da es nur abgebrochen werden sollte, falls das zu eingegebende "Produkt" nicht eingegeben wird.

Auch muss ich sagen, dass ich diesen Code großteils vom Buch abgetippt habe und einige Sachen abgeändert.

Mein Problem ist, dass ich pro Produkt die Anzahl und die Kategorie mit angeben soll.

Wenn ich das jetzt in meinem Programm mache, dann kann ich beim ersten durchlauf die drei Sachen (Produkt, Anzahl, Kategorie) eingeben. Beim zweiten Durchgang kann ich beim Produkt nichts mehr eingeben. Das wird einfach übersprungen und so kann ich die Eingabe auch nicht abbrechen (da wenn nichts beim Produkt steht, es die Abbruchbedingung ist, aber da ich ja nichts eingeben kann bzw. immer etwas dasteht was man nicht sieht, kann ich es nicht abbrechen).

Ich glaube mein großes Problem beim Code liegt derzeit bei dem Scanf und fgets.

Kann mir einer sagen, wie ich dieses Problem umgehen kann?

Mfg

-Capatcha

Geschrieben

Habe dieses Problem nun gelöst.

Jetzt weiß ich aber nicht, wie ich bei Aufgabe b diesen "void print" Befehl angehe.

Kann mir da einer Tipps geben?

Ach ja, im Anhang der bisher geschriebene Code:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


struct elem {

 char name[20];

 int anzahl;

 int kategorie;

 struct elem *next;

};


void loescheTastaturpuffer()

{

  int c;

  while( ((c = getchar()) != EOF) && (c != '\n') )

     ;

}





int main(void) {

    int anzahl;

    int kategorie;

    struct elem

    *anfang = NULL, *cursor;

    char name[20];



    while (1) {

        printf("\nProdukt:");


        fgets(name, 20, stdin);

        if (strlen (name) == 1)

                    break;


        printf("\nAnzahl:");

        scanf("%d", &anzahl);

        printf("\nKategorie:");

        scanf("%d", &kategorie);

        loescheTastaturpuffer();




        cursor =malloc(sizeof(struct elem));


        if (cursor == NULL) {

            printf("Speicherplatzmangel\n");

            exit(1);

            }


        strcpy(cursor -> name, name);

        cursor -> next = anfang;

        anfang = cursor;

        }



    return 0;

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...