Menü Schönheitsfehler

lemmond

Grünschnabel
Hallo,

ich möchte gerne vom Untermenü (menue2) zurück ins Hauptmenü (menue1).
Es geht auch, aber scanf liest die Var. c dann nochmal, sodaß dann
printf zweimal ausgeführt wird. Wie kann ich das verhindern ?
Danke im vorraus !

Code:
menue1:
	printf("Option: ");
	scanf("%c",&c);
	switch(c){
		case '1':
			//tue was
			break;
		case '2':
			//tue was			
			printf("'r' (read)\n");
			printf("'w' (write)\n");
			printf("'s' (show)\n");
			printf("'q' (quit)\n");
			break;
		case 'q':
			goto end;
		default:
			//printf("\nFehler: Option ungueltig!\n\n");
			goto menue1;
	}


	do
    {
menue2:
		scanf("%c",&c);
		switch(c){
			case 'q':
				goto end;

			case 'r':
				//tue was
                                                                                     break;
		
              			case 'w':
			                     //tue was
				break;
			case 's':
				//tue was
				break;
			case 'b':
			                     //zurück nach menue1
			                     goto menue1;
			default:
				goto menue2;
		}
		sleep(2);
    }while(1);

end;
 
Versuch mal:
Code:
scanf("%c",&c);
fflush(stdin);

<edit>fast hätte ich die Erklärung vergessen:
ffush(FILE *) löscht den Lesepuffer der Datei, auf die ein Zeiger als Parameter übergeben wurde. Das ist notwendig, denn scanf liest asu diesem Puffer und wenn die vorige Eingabe nicht entfernt wurde, wird sie ein zweites Mal ausgewertet.
stdin ist der Standard-Eingabe-Stream (im Normalfall die Tastatur). Beim Start deines Programmes werden automatisch stdout (Std-Ausgabe-Stream -> Bildschirm) und eben stdin geöffnet und können wie ganz normale Dateien gehandhabt werden. (Ich gebe zu, dass es sinnlos ist in den stdin zu schreiben.... :-)) </edit>

Johannes

PS: gotos sind gar nicht gerne gesehen und hier überflüssig! Definiere stattessen lieber Funktionen und rufe diese in deinen switch-Blöcken auf!
 
Zuletzt bearbeitet:
Ich habe genau das selbe Problem, nur das unter Linux das fflush(stdin) nicht funktionieren will. Gibt es noch eine andere Möglichkeit den Tastaturpuffer (unter Linux) zu leeren?
 
Warum liest du die Variablen nicht einfach mit
Code:
#include<conio.h> //für getch();
...
char taste;
taste=getch();
switch(taste) {
...
}
...
ein, da spart sich der User die Enter-Taste! ;)
(Das dürfte zumindest eine Lösungsmöglichkeit für das unter Linux nichtfunktionierende fflush(stdin) sein).

Und, wie schon von revelation erwähnt, verwende lieber Funktionen anstelle der goto's!

lg D;-]c
 
Weil ich vielleicht mehr als nur einzelne Chars eingeben will... oder ist da scanf() fehl am Platz?
 
Ich meinte ja nur für das Auswahlmenü...
Bei mehreren Variablen ist natürlich scanf() am besten geeignet!

Post deine Frage mal im Linux-Forum, vielleicht weiß da jemand Bescheid!

lg D;-]c
 
Zurück