Benutzereingabe richtig überprüfen
-
Ich habe hier ein Programm. In dem Programm soll der Benutzer eine 4stellige Zahl eingaben. Das Programm soll überprüfen ob der Benutzer keine anderen Zeichen oder einfach nur ein RETURN eingibt.
Das Programm funktioniert. Aber es funktioniert nicht falls der Benutzer einfach nur RETURN drückt.
Wenn der Benutzer nur RETURN drückt passiert folgendes:
Die Eingabe geht bei jedem RETURN immer weiter und das Programm will umbedingt eine Eingabe (z.B. eine Zahl oder ein Zeichen)Ich denke mein Programm ist eigentlich logisch. Kennt jemand das Problem?
Betriebssystem: windows (xp oder vista) funkioniert bei beiden nicht.
compiler (Dev C++ oder visual 6) funktioniert bei beiden nicht.Hier der Code falls es euch hilft:
i = 0; while(i!=1) { printf("Bitte geben Sie eine 4-Stellige Zahl ein: "); if(scanf("%hd%c", &eingabe, &test) == 2 && test =='\n') { if(eingabe >= 0 && eingabe <= 9999) { showseg7x4(bin2seg7dec(eingabe)); i = 1; } } else if(test != '\n') // falls in test kein \n ist ist noch ein \n im puffer { while(getchar() != '\n') // Tastatur-Puffer leeren Achtung: einfache '' wegen: einzelnes zeichen ; // Bedeutung von while(getchar() != '\n') -> solange kein Enter gedrückt warte auf eingabe. } else if(test == '\n') { i = 0; // nichts machen weil auch nichts im puffer ist } }
-
Friday schrieb:
Wenn der Benutzer nur RETURN drückt passiert folgendes:
Die Eingabe geht bei jedem RETURN immer weiter und das Programm will umbedingt eine Eingabe (z.B. eine Zahl oder ein Zeichen)Ich denke mein Programm ist eigentlich logisch. Kennt jemand das Problem?
Hi,
das "Problem" ist eins, das du selbst verursachst, denn du selbst legst doch die Bedingung fest, wann i==1 eine wahre Aussage liefert.
Wenn du prüfen willst, ob nur ein Return eingegeben wurde, dann kannst du keine Zahlen im Formatstring anfordern ( in deinem Fall %hd ). Nimm fgets und parse den Eingabestring, d.h. hol da deine Zahlen raus. sscanf und co. sind dir dabei behilflich, oder mach es 'manuell', ist ja auch nicht so der Akt. :p Ob nur Return gedrückt wurde, kannst du so feststellen:#include <stdio.h> void remove_newline ( char* buf ) { char* p = strchr(buf,'\n'); if (p) *p=0; } int main() { char buf[BUFSIZ+1]={0}; fgets( buf, sizeof(buf), stdin ); remove_newline (buf); if ( *buf == 0 ) puts ( "Es wurde nichts eingegeben ( nur Return gedrueckt )."); return 0; }
Gruß,
B.B.