Auswahl menü geht in endlosschleife



  • Hallo ich habe ein Problem mit meinem Menü. Es geht immer in eine Endlos schleife wenn ich einen Buchstaben ein gebe. Wo liegt mein fehler? oder was ist die Lösung des Problems?

    Vielen dank

    #include <iostream>
    int Menue(void);
    
    int main (int argc, char * const argv[]) 
    {
    
    int auswahlergebnis;
    
    auswahlergebnis=Menue();
    printf("%i",auswahlergebnis);
    
    return 0;
    
    }
    
    int Menue(void)
    
    {
    
    int auswahl;
    
    printf("Bitte wählen sie was sie machen möchten\n");
    printf("1. Um die Fibonacizahlen zuberechnen\n");
    printf("2. Um den Goldenenschnitt zuberechnen\n");
    printf("3. Um das Programm zu schließen\n");
    
    scanf("%i",&auswahl);   
    
    while((auswahl!=1)&(auswahl!=2)&(auswahl!=3))
    
    {
    
    printf("Sie haben kein erlaubtes Zeichen eingeben. Bitte treffen sie eine korekte Auswahl\n");
    scanf("%i",&auswahl) ;
     }
    
    if(auswahl==3)
    {
    return 0;
    }[cpp]
    return auswahl;
    }
    


  • schau mal deine while-schleife genauer an. sollte etwa so aussehen:

    while( ( auswahl != 1 ) && ( auswahl != 2 ) && ( auswahl != 3 ) )
    


  • macht leider keinen unterschied



  • also wenn ich die while-schleife entsprechend abändere, und anstatt der iostream die stdio.h einbinde, klappt alles bestens.



  • scanf() lässt ungültige Zeichen im Tastaturbuffer zurück. Das heißt, solange du dort nicht selber aufräumst, wird der Buchstabe im Puffer stehen bleiben und dir jeden weiteren Anlauf zunichte machen.

    Lösung:

    while((auswahl!=1)&&(auswahl!=2)&&(auswahl!=3))
    {
      printf("Sie haben kein erlaubtes Zeichen eingeben. Bitte treffen sie eine korekte Auswahl\n");
      while(getch()!='\n');//fegt Puffer bis zum Newline aus
      scanf("%i",&auswahl) ;
    }
    

    (btw, die iostream-Bibliothek hat überhaupt nichts mit scanf() und Konsorten zu tun)


Anmelden zum Antworten