Dos-Fenster schließst nach Eingabe



  • Danke



  • Hab ich zwar jetzt Alles so gemacht wie es da steht, aber das Fenster schließst sich trotzdem noch sofort.

    Ich hab ein Funktion void wait() geschrieben mit den dort genannten Befehlen und sie als letztes in main() aufgerufen.

    MfG Schaich



  • Kann man da nicht ne Sperre reinmachen?
    Wenn "Dos-Fenster"+"schließen" im Titel enthalten, dann automatische Weiterleitung zur FAQ?



  • @Schaich; zeig mal deinen Code, vlt. hast du ja doch einen kleinen Fehler gemacht.

    @Blaze: geniale Idee, schlags mal unten bei Forentechnik vor 😉



  • #include<iostream>

    using namespace std;

    bool kleiner(int,int);
    bool kleiner(int,int,int);
    bool kleiner(int,int,int,int);
    void wait();

    int main()
    {

    int a,b,c;
    cout<<"Bitte geben Sie drei Zahlen ein\n";
    cin>>a;
    cin>>b;
    cin>>c;

    cout<< a << " < " << b << " < " << c << "ist : \n";

    if(kleiner(a,b,c))
    {
    cout<<"wahr";
    }else{
    cout<<"falsch";
    }

    wait();

    }

    bool kleiner(int a,int b){

    return a<b;

    }

    bool kleiner(int a,int b,int c){

    return kleiner(a,b) && kleiner(b,c);

    }

    bool kleiner(int a,int b,int c,int d){

    return kleiner(a,b,c) && kleiner(c,d);
    }

    void wait()
    {

    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    std::cin.get();

    }



  • @blaze: Bist ja anscheinend ein echt toller, wenn das so lächerlich für dich ist Anfängern zu helfen.

    Ich habe alles so gemacht wie es in der FAQ steht und es passiert trotzdem noch.

    Ich danke da sollte jemand mal helfen der Ahnung hat, es sei denn der ist zu sehr damit beschäftigt sich darum zu kümmern threads sperren zu lassen.

    MfG Schaich



  • std::cin.get() und vorher fflush(stdin) wird in 99,999...% aller Fälle genügen.

    #include <iostream>
    
    int main(void)
    {
    	std::cout<<"Hallo Welt!";
    
        fflush(stdin); //Eingabebuffer loeschen
    	std::cin.get(); //Auf Eingabe von Enter warten
    }
    


  • Dann würde die Welt ja immer mehr an Masse verlieren und aus ihrer Umlaufbahn geraten. ⚠



  • Es ist ja so, dass bei allen diesen Varianten zum Verhindern des automatischen Schliessens der Konsole immer der Nachteil "inbegriffen" ist, dass die Eingabe des Benutzers in einem Echo-Betrieb ausgegeben wird, was ich irgendwie störend finde.
    Gibt es in C/C++ eigentlich keine Möglichkeit eine Bnutzereingabe zu erwirken ohne dass die Eingabe auch gleich ausgegeben wird?

    P.S.: In Assembler ginge das ja ganz flott, aber Inline-Assembler ist wohl nicht gerade die englische Art das zu lösen...
    (Ausserdem hat MS VC++ 2005 Express Edition etwas gegen die Zeilen mit int 0x21; wieso eigentlich?)

    m1: mov ah,0x08
        int 0x21
        cmp al,0x1b
        ja  m1
        mov ah,0x4c
        int 0x21
    

    Für die welche kein ASM verstehen:

    m1: char eingabe=my_getchar(); //my_getchar() liest fortlaufend ein und nicht bis zum nächsten Enter
    
        if(eingabe!=0x1b) //ASCII-Code für die Escape-Taste ist 0x1b
          goto m1;
        else
          exit_programm;
    


  • Anstatt solch eine künstliche Sperre einzubauen solltest du ein Konsolenprogramm einfach so starten wie es sich gehört nämlich in einer Konsole.



  • @lolz_ausgeloggt: Schon recht Alter :p

    Es interessiert mich aber trozdem wie so ich den Interrupt 0x21 nicht benutzen kann.

    #include <iostream>
    
    bool escape_gedrueckt(void)
    {
    	char Eingabe;
    
    	_asm
    	{
    		PUSH	AX
    		MOV		AH,0x08
    		INT		0x21 //Hier stuerzt das Programm ab.
    		MOV		Eingabe,AL
    		POP		AX
    	}
    
    	#define ESCAPE 0x1b
    	if(Eingabe==ESCAPE)
    		return true;
    	else
    		return false;
    }
    
    int main(void)
    {
    	std::cout<<"Hallo Welt!"<<std::endl;
    	while(!escape_gedrueckt());
    }
    


  • Kauft euch DOS, aber hört mit "fflush(stdin)" auf! 🕶

    P.S.: Toller Thread... 😃


Anmelden zum Antworten