Ewigschleife beim Einlesen von Buchstabe



  • Hallo Zusammen,

    void takeString(int* Raten)
    {
      int i;
    
      for (i = 0; i < 4; i++)
      {
        printf("Slot %d: ", i + 1);
        scanf("%d", &Raten[i]);
    
        if (Raten[i] != 1 && Raten[i] != 2 && Raten[i] != 3 &&
    	Raten[i] != 4 && Raten[i] != 5 && Raten[i] != 6)
        {
          printf("Wrong input! Try it again!\n");
          i--;
        }
      }
    }
    

    Ich möchte mit dem Code einfach 4 Zahlen einlesen von 1-6 einlesen lassen. Das Problem ist, wenn jemand dann z.B. keine Zahl kommt sondern ein Buchstabe soll er für diesen Slot nochmal eine EIngabe machen. Jedoch bringt das den Code in eine Ewigkeitsschleife.

    Kann mir wer ein Tipp geben wie ich das verhindern kann ?

    Grüße,
    Klaus12



  • Wenn scanf() etwas findet, was es nicht interpretieren kann, dann bleibt das im Eingabepuffer stehen - und steht im nächsten Schleifendurchlauf immer noch dort. Da mußt du dich selber darum kümmern, daß du einen "suaberen" Eingabepuffer hast.
    In C++ hätte ich jetzt ignore() vorgeschlagen, in C hilft vermutlich sowas:

    while(fgetc(stdin)!='\n');
    


  • Vielen danke 🙂

    Funktioniert prima damit !


Anmelden zum Antworten