Capatcha Geschrieben 28. November 2009 Teilen Geschrieben 28. November 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 28. November 2009 Teilen Geschrieben 28. November 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Capatcha Geschrieben 28. November 2009 Autor Teilen Geschrieben 28. November 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Capatcha Geschrieben 28. November 2009 Autor Teilen Geschrieben 28. November 2009 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; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.