Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

dringende Anfängerhilfe verkettete Liste

Empfohlene Antworten

Veröffentlicht

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

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.

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

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;

}

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.