R
Hallo Akay2113!
Schau dir mal doch dieses Beispiel an:
/*
* switchtest is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* switchtest is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Löscht den Tastaturpuffer um Fehler nach der Eingabe zu vermeiden*/
void clpuf(void)
{
while (getc(stdin) != '\n')
;
}
int main()
{
char zeichen = 'x'; /* mit Wert initialisieren der nicht in Liste ist */
do
switch(zeichen)
{
default:
printf("\nswitch-Test\n");
printf("Englisch......e/E\n");
printf("Deutsch.......d/D\n");
printf("Französisch...f/F\n");
printf("Ende..........o/e\n");
printf("Ihre Wahl: \n");
scanf("%c", &zeichen);
clpuf();
if (zeichen == 'O') zeichen = 'o';
break;
case 'e':
case 'E':
printf("\nGewählt %c\n", zeichen);
printf("Englisch\n");
zeichen = 'x';
break;
case 'd':
case 'D':
printf("\nGewählt %c\n", zeichen);
printf("Deutsch\n");
zeichen = 'x';
break;
case 'f':
case 'F':
printf("\nGewählt %c\n", zeichen);
printf("Französisch\n");
zeichen = 'x';
break;
}while(zeichen != 'o');
return EXIT_SUCCESS;
}
Hier könnte man noch einen Zähler einbauen, der die ungültigen Eingaben
auflistet und nach einer bestimmten Anzahl von Fehleingaben das Programm
abbricht.
Wichtig ist, das du nach der erledigten case-Anweisung die Variable
"zeichen" auf einen Wert höher als in der List vorhanden zurückstellst, damit
das Ganze nicht in einer Schleife hängen bleibt.
Bei Verwendung von getc anstatt scanf tritt übrigens das selbe Problem
mit den übrig gebliebenen Zeichen im Tastaturpuffer auf.
kopiere dir vorsichtshalber also die Funktion clpuf, um bei späteren
Problemen darauf zurück greifen zu können.
Sieh dir auf mal auch den Unterschied von getc zu fgetc an.
By the way:
Hier mal eine kleine Datei mit clpuf() und einen Ersatz für getch()
den ich irgendwann mal im Netz gefunden habe, funzt auch unter gcc in Linux!
#ifndef GETCH_H_INCLUDED
#define GETCH_H_INCLUDED
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int getch(){
struct termios oldt, newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
void clpuf(void)
{
while (getc(stdin) != '\n')
;
}
#endif // GETCH_H_INCLUDED