Leerdurchlauf der while-Schleife nach Abfrage
-
Also das mit der Eingabe funktioniert so fehlerfrei, auch wenn ich das falsch verstanden habe.
Mit getch aufrufen und verwerfen meinst du einfach in form von "getch();"Ja ich denke auch, dass ich das mit einer Kombination aus while und switch machen muss. Ich bin nur verwirrt, weil das so bisher nicht behandelt wurde. Die Programmieraufgaben aus den vorherigen Klausuren des gleichen Moduls konnte ich wirklich in 10 Minuten aufschreiben. Deshalb denke ich die ganze Zeit ich stehe hier irgendwie komplett auf dem Schlauch.
-
Du kannst auch sowas machen:
while (1) { printf("Bitte das gewuenschte Kursangebot ('G', 'Z', 'E') eingeben:\n"); scanf(" %c", &angebot); if (strchr("GZE", angebot)) break; printf("Kursangebot ist unbekannt!\n"); }
Edit: statt
printf
kannst du auchputs
nehmen, wenn du eh keinen Formatstring verwendest und einen Zeilenumbruch wünscht.
-
strchr ist mir bisher nicht bekannt und wurde auch nie behandelt. Ich muss mir mal die funktionsweisen von switch angucken und das wohl darüber irgendwie regeln.
Nur mal zum Vergleich:
In einer anderen Klausur des gleichen Moduls musste man eine gerade positive Zahl einlesen und alle geraden Zahlen von Null bis zu dieser Zahl ausgeben.
Die schwierigste Aufgabe war noch eine Matrix mit regelmäßig aufsteigenden Werten zu initialisieren und auszugeben.
Hatte mich sehr gut vorbereitet gefühlt und dann kam so etwas
-
@Kintaro777 sagte in Leerdurchlauf der while-Schleife nach Abfrage:
strchr ist mir bisher nicht bekannt und wurde auch nie behandelt. Ich muss mir mal die funktionsweisen von switch angucken und das wohl darüber irgendwie regeln.
Das sucht ein Zeichen in einem String.
Hier könntest du stattdessen einfach schreiben:
if (angebot == 'G' || angebot == 'Z' || angebot == 'E') break;
Wenn du einen großen Switch machen willst, dann solltest du darauf achten, dass die einzelnen cases möglichst nur eine Funktion aufrufen, ansonsten wird das schnell unübersichtlich.
-
Danke. Bevor ich genau verstanden habe, wie du das meintest (was ich jetzt habe), hast du mich auf eine Idee gebracht und jetzt funktioniert es wirklich, falls ich nicht wieder einen Testfall übersehen habe.
Ich habe es jetzt wie folgt gelöst:
#include <stdio.h> #include <stdlib.h> #include <conio.h> int main(void) { char gruppe = 'G', einzel = 'E', zehner = 'Z', angebot, kurs, wdh; double tagumstz, preis; tagumstz = 0.00; do{ printf("Bitte das gewuenschte Kursangebot ('G', 'Z', 'E') eingeben:\n"); scanf(" %c", &angebot); while(angebot!='G' && angebot!='Z'&& angebot !='E') { printf("Kursangebot ist unbekannt!\n"); printf("Bitte das gewuenschte Kursangebot eingeben. \n"); scanf(" %c", &angebot); } kurs = angebot; preis = 24; if (kurs == einzel) preis = 72; if (kurs == zehner) preis = 24*10*0.9; tagumstz = tagumstz + preis; printf("Weitere Eingabe? ('J' oder 'N')\n"); wdh=getch(); } while (wdh!='N'); printf("Der Tagesumsatz betraegt: %f Euro", tagumstz); return EXIT_SUCCESS; }
aber die strchr-Funktion merke ich mir auf jeden Fall.
-
@Kintaro777 sagte in Leerdurchlauf der while-Schleife nach Abfrage:
char gruppe = 'G', einzel = 'E', zehner = 'Z'
Wozu sind diese Variablen da?
-
Die sind entstanden, weil ich noch nicht wusste, wie ich das letztlich realisieren würde. Klar jetzt kann man sie natürlich auch streichen. Ich bin aber erstmal froh, dass es funktioniert :P. Wahrscheinlich kann ich mir einer der Variablen "angebot" und "kurs" auch sparen. Muss ich mir nochmal angucken. Mache gerade nebenbei noch etwas anderes.
-
Obligatorisch: Why not use Double or Float to represent currency?
-
@Swordfish
Vielen Dank für den Hinweis.Die initialisierung des Umsatzes in Form einer GKZ war jedoch in der Aufgabenstellung vorgegeben.
-
@Kintaro777 sagte in Leerdurchlauf der while-Schleife nach Abfrage:
Die initialisierung des Umsatzes in Form einer GKZ war jedoch in der Aufgabenstellung vorgegeben.
Das ist traurig. Gib das Feedback vielleicht an denjenigen weiter von dem du die Aufgabe bekommen hast.
-
scanf(" %c") + scanf(" %c%*c", &angebot)
- ist beides sinnfrei, du wirst Probleme bei Leereingaben, bei Mehrzeicheneingaben und bei gepipten stdin bekommen
- scanf UND getch zu benutzen, ist sinnfrei
- getch ist kein Standard
- 2x "scanf(" %c", &angebot)" einzubauen ist auch sinnfrei
- ...