Komplimierte EXE Datei schließt sich sofort!!! Wo ist der Fehler??? (!!!Anfänger!!!)



  • Ich hab durch ein tolles Buch mal mit C++ angefangen.
    Ich hab den DJGPP-Compiler installiert und bin nach Anleitung vorgegangen (auch bei den Umgebungsvariablen geändert etc.).

    Nun habe ich den HELLO WORT code gesachriben

    #include <iostream.h>
    
    int main()
    {
    	cout << "Hello World!\n";
    	return 0;
    }
    

    Aber wenn ich nun bei Windows XP die DOS-Eingabeaufforderung öffne und dort erstaml auf den Desktop wechsele (da da meine "HelloWorld.cpp" liegt) und dann
    "gxx helloworld.cpp -o test.exe" eingebe, kommt zwar eine EXE-Datei dabei heraus,
    doch wenn ich diese öffne, öffnet sich ein DOS-Fenster das sich sofort wieder schließtnach nichtmal einer Sekunde!!!

    Was hab ich falsch gemacht?? 😕

    Danke! 🕶



  • Hallo, bin zwar selbst noch Anfänger, aber du kannst ein getch() einfügen, dafür musst du aber glaube ich conio.h includieren, dann wartet das Fenster solange, bis du eine Taste drückst. getch steht nämlich für get char oder so ähnlich 🙄, naja, vielleicht hab ich dir ja weitergeholfen.

    MfG Daniel



  • Danke für die schnelle Hilfe... aber kannst du villeicht nochmal zeigen wie genau das geht?? Ich weiß nämlich nicht wo das hinkäme 🙂
    Villeicht an dem Beispiel mit dem HelloWorld was ich da hatte.

    Das wäre sehr nett! 👍



  • #include <conio.h>
    #include <iostream>   // Aktuell bleiben ;)
    using namespace std;
    
    int main()
    {
    
    	getch();
    	return(0);
    }
    

    Alternativ kannst du auch einfach noch nach einer Variablen verlangen:

    #include <iostream>   // Aktuell bleiben ;)
    using namespace std;
    
    int main()
    {
    
    	int tmp;
        cin>>tmp;
    	return(0);
    }
    


  • oder einfach

    std::cin.get();
    

    verwenden 🙂



  • Danke!!! Jetz funktioniert es! 😃

    Das hab ich zwar noch nicht verstanden...

    std::cin.get();
    

    wo gehört das nun wieder hin? Und was bringt das?

    Aber trotzdem danke! Nun werde ich mein Buch weiter benutzen. 😃



  • das problem bei der konsole ist, dass sie sich schließt, wenn sie nichts mehr zu tun hat, das ist-wie man sich denken kann-schlecht, das problem kann gelöst werden, indem man das programm über die eingabeaufforderung(start->zubehör->eingabeaufforderung unter windows) aufruft.

    wenn du dies nicht machen willst, musst du vom user auf eine eingabe warten

    hier mal die lösung die ich atm für das problem verwende:

    //includes
    #include <conio.h>//for wait 
    #include <windows.h>//for wait
    //funktion 
    void wait() 
    { 
        FlushConsoleInputBuffer ( GetStdHandle ( STD_INPUT_HANDLE ) ); 
        getch (); 
    }
    int main(){
        wait();
    }
    

    das programm läuft solange, bis der user ein zeichen eingibt oder enter drückt, dh das standard "press any key"
    ok, könnte sein, dass dies für einen anfänger harten tobac darstellt, hier mal eine lösung die weniger vorwissen braucht:

    #include <iostream>
    using namespace std;
    int main(){
        cin.get();
    }
    


  • Am besten schaust du auch mal hier in die FAQ 😉
    klick

    Denn da gibt es zum Beispiel auch eine Methode, das Schließen zu verhindern, ohne dass man ENTER drücken muss, sondern bei jeder Taste 😉

    Wie gemein, du hast kurz vor mir gepostet 😡 😃



  • otze schrieb:

    das problem bei der konsole ist, dass sie sich schließt, wenn sie nichts mehr zu tun hat, das ist-wie man sich denken kann-schlecht

    Wieso schlecht? Seit wann ist es schlecht wenn ein Programm nach Ausführung terminiert? 😉

    Strg+F5 zum Ausführen behebt bei einigen IDEs das Problem auch ohne Modifikationen am Code.



  • 1.früher gabs das meines wissens nicht.
    2. kein anfängerbuch nimmt sichd er problematik an, das nervt-.-



  • otze schrieb:

    1.früher gabs das meines wissens nicht.

    Das war schon immer so.



  • In Win95 wurden bei mir DOS-Fenster immer offen gehalten, stand halt "BEENDET" drin, aber so sah man noch was 😉

    In WinXP kann man einfach mit Rechtsklick->Programm->Bei Beenden schließen das von Hand einstellen...



  • Also ich weiss nicht,ob ich mit ner WinME oder Win2k Eingabeaufforderung(auch Konsolenanwendung genannt)Aussenseiter bin, aber bei mir schliesst sich das Programm auch immer selbst.

    Das Beendet kommt nur bei Bat Dateien.

    Und eine Frage am Rande:Warum statet ihr eure Programme nicht direkt in der Konsole oder schreibt ne test.bat mit den Inahlt Programm.exe?

    Wozu soll ne Konsole geöffnet bleiben wenn die Anwendung fertig ist?

    Beendest du nicht Windowsfenster sobald zb. ein Download fertig ist?



  • the_hero99 schrieb:

    1.Und eine Frage am Rande:Warum statet ihr eure Programme nicht direkt in der Konsole oder schreibt ne test.bat mit den Inahlt Programm.exe?

    2.Wozu soll ne Konsole geöffnet bleiben wenn die Anwendung fertig ist?

    1. Weils sowas lustiges praktisches wie "Kompilieren & Ausführen" gibt.
    2. Weil man sehen will was sie ausgegeben hat?



  • otze schrieb:

    2. kein anfängerbuch nimmt sichd er problematik an, das nervt-.-

    Das stimmt. Die Frage würde deutlich seltener kommen. Allerdings ist das Problem auch plattformspezifisch.



  • Allerdings ist das Problem auch plattformspezifisch.

    als ob anfängerbücher das nicht auch wären... (die meisten zumindest ;))

    viel ärgerlicher find ichs das (wieder nur bei manchen) auch in aktuellen versionen des buches noch so veralteter code benutzt wird, dass er auf dem mitgelieferten compiler nicht fehlerfrei kompiliert...



  • Johannes Maier schrieb:

    Am besten schaust du auch mal hier in die FAQ 😉
    klick

    Denn da gibt es zum Beispiel auch eine Methode, das Schließen zu verhindern, ohne dass man ENTER drücken muss, sondern bei jeder Taste 😉

    Wie gemein, du hast kurz vor mir gepostet 😡 😃

    Der Link ist gut, aber es ergibt sich bei der C++-Variante eine kleine
    Problematik: http://www.c-plusplus.net/forum/viewtopic.php?t=80672&highlight=cin

    Hier hab ich was dazu geschrieben, was das Problem beseitigen sollte (letzte Seite, letzter Post):
    http://www.c-plusplus.net/forum/viewtopic.php?t=81969&postdays=0&postorder=asc&highlight=cin&start=30

    mfg
    v R



  • Lars schrieb:

    the_hero99 schrieb:

    1.Und eine Frage am Rande:Warum statet ihr eure Programme nicht direkt in der Konsole oder schreibt ne test.bat mit den Inahlt Programm.exe?

    2.Wozu soll ne Konsole geöffnet bleiben wenn die Anwendung fertig ist?

    1. Weils sowas lustiges praktisches wie "Kompilieren & Ausführen" gibt.
    2. Weil man sehen will was sie ausgegeben hat?

    Oha dann bin ich mal gespannt wenn ein Programm zb. 2000 mal oder so eine Aktion durchführt(welche auch immer),willst du denn wirklich 2000 mal eine Taste drücken?

    Und was spricht gegen eine Debug Klasse? Wo du deine Werte etc reinschreibst?
    Oder noch besser was spricht gegen Nutzung eines Debuggers?

    Und ich hatte seitdem ich programmiere (2 Jahre) mir nie diese Frage gestellt.

    Warum ich ein Programm anhalten soll,was fertig ist.



  • Lars schrieb:

    the_hero99 schrieb:

    1.Und eine Frage am Rande:Warum statet ihr eure Programme nicht direkt in der Konsole oder schreibt ne test.bat mit den Inahlt Programm.exe?

    2.Wozu soll ne Konsole geöffnet bleiben wenn die Anwendung fertig ist?

    1. Weils sowas lustiges praktisches wie "Kompilieren & Ausführen" gibt.
    2. Weil man sehen will was sie ausgegeben hat?

    Oha dann bin ich mal gespannt wenn ein Programm zb. 2000 mal oder so eine Aktion durchführt(welche auch immer),willst du denn wirklich 2000 mal eine Taste drücken?

    Und was spricht gegen eine Debug Klasse? Wo du deine Werte etc reinschreibst?
    Oder noch besser was spricht gegen Nutzung eines Debuggers?

    Und ich hatte seitdem ich programmiere (2 Jahre) mir nie diese Frage gestellt.

    Warum ich ein Programm anhalten soll,was fertig ist.



  • Find ich lustig,

    ich hab mir die frage wie ich das prog anhalten soll schon bei
    HELLO WORLD

    gestellt....

    außerdem soll nicht jede funktion angehalten werden, sondern nur die endausgabe...

    zb.. ein

    cout<<"Auf wiedersehen!";
    wait();
    return 0;
    }
    

    oder so... da find ichs praktisch


Anmelden zum Antworten