Rekursiver Aufruf



  • Hi,
    ich habe folgende Funktion, in der ein Wert eingelesen wird und in eine globale Variable gespeichert wird.
    Wenn der eingebene Wert keine Zahl ist, soll die Funktion noch einmal aufgerufen werden. Das klappt auch, aber irgenwie hängt das Prog sich dann auf und ich kann nichts mehr eingeben ... als wenn es in einer Endlosschleife steckt ...

    Hier die Funktion :

    void menueSuche(void){
         system("cls");
         printf("\nSuche in einem Feld von Zufallszahlen - Menue");
         printf("\n\n");
         printf("\nBitte waehlen Sie das Suchverfahren. ");
         printf("\n1 - lineare Suche ");
         printf("\n2 - binaere Suche ");
         printf("\nEingabe : ");
         if(scanf("%u", &searchMode)!=1){
             menueSuche();
         }
    }
    

    Wo ist mein Denkfehler ?

    Gruß
    Christoph



  • ChrisG72 schrieb:

    Wo ist mein Denkfehler ?

    Sagt doch schon der Titel von dir.

    Pack eine do-while Schleife um deine Eingabe.



  • Erstens: Wenn scanf() die Eingabe nicht interpretieren konnte, bleibt sie im Tastaturpuffer zurück, das heißt wenn du Müll eingibst wird es in jeder Rekursionsstufe die selbe Eingabe auswerten (zumindest solange der Stack noch Platz hat ;)).
    Zweitens: Für so etwas brauchst du keine Rekursion - da reicht eine while()-Schleife.



  • Vielleicht hilft dir:

    fflush(stdin);
    


  • ktio schrieb:

    Vielleicht hilft dir:

    fflush(stdin);
    

    Ja, das hilft dir, den Rechner zu plätten - der Aufruf gehört in den Bereich "undefiniertes Verhalten".



  • CStoll schrieb:

    ktio schrieb:

    Vielleicht hilft dir:

    fflush(stdin);
    

    Ja, das hilft dir, den Rechner zu plätten - der Aufruf gehört in den Bereich "undefiniertes Verhalten".

    Sorry, wusste ich nicht. Wie kann man den Bestehenden Input entfernen, ohne fflush zu nutzen?



  • Ich würde ja fgetc() verwenden:

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

    (bin nicht sicher, ob es etwas kürzeres gibt - aber es tut seinen Zweck)



  • Thx für die Info 🙂



  • Hi,
    sorry fange gerade erst mit C an.

    Folgendes klappt nicht :

    void menueSearch(void){
         system("cls");
         printf("\nSuche in einem Feld von Zufallszahlen - Menue");
         printf("\n\n");
         printf("\nBitte waehlen Sie das Suchverfahren. ");
         printf("\n1 - lineare Suche ");
         printf("\n2 - binaere Suche ");
         while(scanf("%u", &searchMode)!=1){
              printf("\nEingabe : ");
         }
    }
    

    Wo soll die While-Schleife hin ?
    Gruß
    Christoph



  • Wie äußert sich denn dieses "geht nicht"? Eventuell solltest du innerhalb der while-Schleife die nicht-interpretierten Eingaben entsorgen (s.o.), damit du beim nächsten Durchlauf wieder neue Eingaben vom Anwender entgegennehmen kannst.


Anmelden zum Antworten