Problem bei char Eingabe

Plasmaschlag

Grünschnabel
Hi,

ich habe ein Problem bei einer char eingabe. Wenn ich mehr als ein Buchstabe / eine Zahl eingebe und die erste eingabe weder 1,2 oder i ist, dann kommt wie geplant ein Hinweis und danach kann man eine neue Eingabe machen. Wenn ich jedoch mehr als 1 Eingabe mache (also z.B. 13 oder thfdf) wird für jede Zahl / jeden Buchstaben 1x 3 Sekunden gewartet. Wie bekomme ich es hin, dass man nur 1 Zahl / Buchstaben eingeben kann?

Code:
int main (void)
{
 int t=0;
 char language;

 do{
  printf("Select your language:                                            i = information\n\t\t\tEnglish = 1\n\t\t\tDeutsch = 2\n\t\t\t:");
  scanf(" %c", &language);

          if(language=='i'){;system("cls");
            printf("\n\tDownloadtime calculator \n\tVersion: 5.2\n\tDate   : 10.01.13\n\n");continue;}

          if(language=='1'||language=='2'){
              t=1;
              system("cls");break;}

          if(t!=1){
              printf("\nSorry. Please try again. Press 1,2 or i.");
              Sleep( 3000 );
              system("cls");continue;}

 }while(t!=1);
 
Versuche es mal mit scanf(), aber schreibe vorher ein fflush(stdin);

Liebe Grüsse
cwriter

/EDIT: Ja, ich habe es eben gelesen: Undefined behavior. Einzige Alternative: fgets(buf,SIZE_OF_INPUT, stdin). Allerdings kann es immer sein, dass der Input grösser ist als SIZE_OF_INPUT.
 
Zuletzt bearbeitet:
Hallo Plasmaschlag,

Der Eingabestrom ist wie es der Name sagt ein Strom, in diesem Fall einer der sowohl gelesen als auch geschrieben werden kann. Aus diesem Grund hat dieser Buffer auch keine "Grösse" und du kannst nicht bis zum Ende lesen. fflush ist wie cwriter sagte für stdin undefiniert. Möglicherweise leert es den Eingabepuffer, möglicherweise nicht.

Was du machen kannst ist so lange mit fgets und einem fixen Buffer zu lesen bis in diesem Buffer am Ende eine neue Zeile steht. Dann hast du alles bis zum Ende der Eingabe des Benutzers aus dem Strom genommen.

Grüsse
Muepe
 
Bin gerade noch dabei C zu lernen. Hab jetzt gerade immernoch keine Ahnung wie ich das machen kann xD

Soweit ich das jetzt verstehe, kann man nicht verhindern, dass man mehr als 1 Ziffer eingeben kann.

Kennt ihr dann vielleicht eine Lösung, wie nicht (bei 5 falschen eingegebenen Ziffern) 5x 3 sekunden gewartet wird? Ich hab schon mit ein paar If-Abfragen, mit getchar() und Arrays herum experimentiert, aber da ist leider noch nichts brauchbares herausgekommen.
 
Zuletzt bearbeitet:
Weil man dann nicht weiß (als unerfahrender Benutzer) was man falsch gemacht hat. Und weil ich gerne wissen würde, wie das funktioniert, wollte ich Sleep drinn lassen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück