dragonabllz
Ensign
- Registriert
- Mai 2011
- Beiträge
- 254
Hallo
ich stehe vor einem Problem in C, das ich nicht ganz verstehe (bzw. die internen Vorgänge nicht nachvollziehen kann).
Im Folgenden ist ein sinnloser Code, der nur das Problem kenntlich machen soll:
Also das (sinnlose) Programm verlangt eine Zahl zwischen 1-8 und dahinter ein X (Sinn und Zweck ist hier erstmal nicht vorhanden!!!). Das Programm ruft sich auch immer wieder selber auf.
Gibt man irgendwas falsches an, z.b: "blabla" dann wird "Falsche Eingabe" ausgegeben und die Funktion wird wieder aufgerufen.
Jetzt kommen wir mal zum Problem:
Gebe ich "8Xabcde" ein ist alles kein Problem. Der Code nimmt das "8X" auf und löscht den Rest aus dem Puffer bzw. aus stdin(?)
mithilfe von deleteBuffer, denn sonst würde beim nächsten Aufruf von "fgets" das "abc" kopiert.
Gebe ich aber z.b. nur "5" oder eine richtige Eingabe z.b. "6X" ein, dann hängt das Programm bei deleteBuffer und man muss aufgrund der Zeile "c=getchar()" ein Enter drücken.
An sich kein Weltuntergang, dennoch möchte ich das vermeiden. Und überhaupt verstehe ich nicht weshalb das geschieht.
Bei Eingaben > 2 geschieht dies nicht. Nur bei Eingaben <= 2. Ich weiss, dass dies mit fgets und getchar und stdin zusammenhängt,
weiß aber nicht wo genau das Problem liegt.
Würde mich über jegliche Hilfe freuen.
PS: Eine Nebenfrage: Kann man anders als mit "deleteBuffer" den Eingabestrom (stdin) löschen? Mit fflush() funktioniert das nicht.
ich stehe vor einem Problem in C, das ich nicht ganz verstehe (bzw. die internen Vorgänge nicht nachvollziehen kann).
Im Folgenden ist ein sinnloser Code, der nur das Problem kenntlich machen soll:
Code:
void sinnlos(){
char input[4]; // Zwei Zeichen + '\n' + '\0'
fgets(input,4,stdin);
if((input[0]<='8' && input[0]>='1') && (input[1]=='X')){
printf("\nToll gemacht!");
else if(input[0] == '\n')
exit(-1);
else
printf("\nFalsche Eingabe");
deleteBuffer();
sinnlos();
void deleteBuffer(){
char c;
do{
c=getchar();
}while(c!='\n');
Also das (sinnlose) Programm verlangt eine Zahl zwischen 1-8 und dahinter ein X (Sinn und Zweck ist hier erstmal nicht vorhanden!!!). Das Programm ruft sich auch immer wieder selber auf.
Gibt man irgendwas falsches an, z.b: "blabla" dann wird "Falsche Eingabe" ausgegeben und die Funktion wird wieder aufgerufen.
Jetzt kommen wir mal zum Problem:
Gebe ich "8Xabcde" ein ist alles kein Problem. Der Code nimmt das "8X" auf und löscht den Rest aus dem Puffer bzw. aus stdin(?)
mithilfe von deleteBuffer, denn sonst würde beim nächsten Aufruf von "fgets" das "abc" kopiert.
Gebe ich aber z.b. nur "5" oder eine richtige Eingabe z.b. "6X" ein, dann hängt das Programm bei deleteBuffer und man muss aufgrund der Zeile "c=getchar()" ein Enter drücken.
An sich kein Weltuntergang, dennoch möchte ich das vermeiden. Und überhaupt verstehe ich nicht weshalb das geschieht.
Bei Eingaben > 2 geschieht dies nicht. Nur bei Eingaben <= 2. Ich weiss, dass dies mit fgets und getchar und stdin zusammenhängt,
weiß aber nicht wo genau das Problem liegt.
Würde mich über jegliche Hilfe freuen.
PS: Eine Nebenfrage: Kann man anders als mit "deleteBuffer" den Eingabestrom (stdin) löschen? Mit fflush() funktioniert das nicht.