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;

}

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...