While-Schleifen Problem



  • lkklk schrieb:

    machmal richtig puffer leer nach jedem scanf.

    Hab ich direkt am Anfang gesagt, irgendein lustiger Mod hat's aber gelöscht... 🙄 😕



  • Also in den anderen Funktionen, gebe ich erstmal nur etwas aus, drücke dann eine taste (weil ich da ein getch() ) habe und komme anschließend wieder ins menü() zurück.
    Dann habe ich eine Funktion wo ich etwas berechne und auch eingaben habe. Auch dort habe ich überall vor einem scanf() ein fflush(stdin) stehen.

    Aber ist immer noch dasselbe problem. Beim erstmal beendet es sofort. Nur wenn ich in eine andere Funktion gehe, dann wieder ins menü() komme, muss ich 2-3x "q" drücken.

    Liegt es sonst am getch()?



  • MandaJohn schrieb:

    ... dort habe ich überall vor einem scanf() ein fflush(stdin) stehen.

    ich meine richtig leer machen. nicht dieses fflush undefiniert-verhalten ding!



  • Kannst du mir das "richtig leer machen " mal erklären? Also ich kenn das nur mit fflush(stdin).
    Kannst du mir deine andere Variante mal sagen?



  • fflush(stdin) sollte man nicht nehmen. Warum das so ist und eine Möglichkeit zum Puffer leeren, steht hier :
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html

    Wurde jedoch noch kein Zeichen eingegeben, geht die dort gepostete while-Schleife in eine Endlosschleife über!

    Meine Lieblingsvariante zum Pufferleeren ist die hier:

    // clear buffer
    void cb() 
    {
    	setvbuf(stdin,NULL,_IONBF,0);
        setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
    }
    

    Gruß,
    B.B.



  • Rufst Du vielleicht "menu ()" aus den anderen Funktionen direkt auf ?



  • Wenn ich menü aufrufe gebe ich schon zwei parameter mit, oder hab ich deine Frage falsch verstanden?

    EDIT: @B.B du meinst sicherlich, dass ich vor jedem scanf() die folgenden zeilen einfüge oder?

    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);



  • MandaJohn schrieb:

    Nur wenn ich in eine andere Funktion gehe, dann wieder ins menü() komme, muss ich 2-3x "q" drücken.

    Poste mal die Stelle, wie Du aus der anderen Funktion zurück ins Menu kommst. Es darf kein direkter Aufruf sein.



  • void afunktion(FILE *out, test_t *kreis)
    {
    	kreis->r = 100.00;
    	kreis->l = 0.01500000;
    	kreis->c = 0.00000180;
    	kreis->fmin = 100.00;
    	kreis->fmax = 1000.00;
    	kreis->schritte = 21;
    	out			 = stdout;
    
    	system("cls");
    	fprintf(out, "+++++++++++++++++++++++++++++++++++++++++++++++");
    	fprintf(out, "\nSchwingkreisparameter:");
    	fprintf(out, "\n+++++++++++++++++++++++++++++++++++++++++++++++");
    	fprintf(out, "\nW-wert			 : %.2lf", kreis->r);
    	fprintf(out, "\nI-wert			 : %lf", kreis->l);
    	fprintf(out, "\nK-wert			 : %lf", kreis->c);
    	fprintf(out, "\nUGrenze: %.2lf", kreis->fmin);
    	fprintf(out, "\nOGrenze: %.2lf", kreis->fmax);
    	fprintf(out, "\nSchritte		 : %d", kreis->schritte);	
    	fprintf(out, "\n+++++++++++++++++++++++++++++++++++++++++++++++");
    
    	getch();
    	menu(out, schwingkreis);//HIER KOMME ICH INS MENÜ ZURÜCK		
    }
    


  • afunktion wurde bereits von menu aufgerufen. Wenn Du innerhalb der afunktion menu noch einmal aufrufst, dann brauchst Du 2x'q' um da wieder rauszukommen. Streiche den Aufruf von menu in der afunktion.



  • Ah jetzt gehts. Danke für den Hinweis!
    Ich hab das zurückkehren ins menü() auch in anderen Funktionen, deswegen gings wahrscheinlich nicht.
    Ich nehme es mal raus.

    Danke!

    Gruß
    Manda


Anmelden zum Antworten