Leerdurchlauf der while-Schleife nach Abfrage



  • 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 auch puts 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.





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



  • @Kintaro777

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

Anmelden zum Antworten