Dos-Fenster blinkt nur kurz auf



  • Hallo,

    ich versuche gerade die Programmiesprache C++ zu erlernen.
    Ich habe auch schon ein paar kleine Programme geschrieben.
    Die typische "Hello World!" ausgabe auf dem Bildschirm klappt aber nicht.

    Wenn ich die .exe per Doppelklick starte, blinkt das Dos-Fenster einmal ganz kurz auf und ist dann wieder weg. Ich kann also nicht sehen was ich sehen möchte.

    Liegt das an dem Code oder woran könnte es sonst liegen?
    Hier der Code:

    #include <iostream.h>
    using namespace std;

    int main()
    {
    cout << "Hello World!\n";
    return 0;
    }

    Vielen Dank für eure Hilfe

    Gruss Pelikan



  • Pack einfach ein getchar() vor das return, dann bleibt das Fenster offen (da das Programm ja noch nicht beendet ist) und wartet darauf, dass du Enter drückst.



  • Hi Matze,

    Super. Danke.
    Funktioniert bestens.

    Das getchar() war noch in keiner Lektion enthalten 😋

    Gruss Pelikan



  • Wenn du das Programm über eine bereits geöffnete Konsole starten würde, wäre es auch nicht nötig. Du würdest eben zur Kommandozeile zurückkehren. Wenn du aber über Windows ein Konsolenprogramm startest, wird die Konsole nach Programmbeendigung nunmal geschlossen, wie du es vielleicht auch von anderen Programmen kennst.



  • und wenn ich nun diesen Code eingeb:

    #include <iostream.h>
    using namespace std;

    int main()
    {
    int zahl;
    cout << "Bitte geben Sie eine Zahl ein. ";
    cin >> zahl;
    cout << "Sie haben die Zahl " << zahl << " eingegeben." << endl;
    getchar();
    return 0;
    }

    wird trozt getchar() sofort nach der eingabe der Zahl der Dos-Modus verlassen.
    Die Ausgabe:
    cout << "Sie haben die Zahl " << zahl << " eingegeben." << endl;

    sehe ich nicht mehr.

    wie kann man das abfangen?



  • Du musst den Eingabepuffer vor deinem getchar leeren (nutze die Forensuche).

    Übrigens: bitte benutze Code-Tags (Code mit [cpp ] und [/cpp ] (ohne Leerzeichen) umschließen).



  • jup, danke für die Tips.

    ich habe folgendes gefunden:

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

    oder am ende statt dessen:

    system("Pause");
    

    was ist da eleganter? Oder ist es völlig egal was ich nehme?



  • system("pause") hat verschiedene Nachteile. Da gibt's diverse Threads hier...



  • also ich persönlich hätte am Schluss was geändert ...

    #include <iostream.h>
    using namespace std;
    
    int main()
    {
    
    int zahl;
    cout << "Bitte geben Sie eine Zahl ein. " ;
    cin >> zahl ;
    cout << "Sie haben die Zahl " << zahl << " eingegeben." << endl;
    system("pause");
    
    }
    

    es geht meineserachtens nur system("pause") ; die anderen methoden mit cin.get(); o.ä. gehen auch nicht ... wundert mich wieso ... ich hab auchmal mit sowas angefangen ... aber an so ein "problem" kann ich micht nicht erinnern 😕 ... aber system sollte nicht zur angewohnheit werden ... wieso ? siehe weiter unten bei den Themen hier ...

    mfg 🙂



  • Was meinst du mit "cin.get() o.ä. gehen auch nicht"? Klar gehen die!



  • gut dann teste das mal ... setz anstatt system("pause") ; mal das cin.get(); ein ... bei mir ging das NICHT !!!



  • Dann musst du wohl vorher den Eingabepuffer leeren. Mit VS-Compiler kannst du dafür fflush(stdin) benutzen. Es gibt aber bessere (standardkonforme) Methoden dafür (=> Forumssuche).

    EDIT: Binde besser <iostream> ein, nicht <iostream.h>.



  • meinstens stehen keine includes bei mir oben ... ich benutze den Bloodshev Dev-C++ Compiler ( echt gut ) ... und da is des egal ob ich ein .h oder nix nach iostream oder garkein iostream hinschreibe ... aber wie leere ich diesen eingabepuffer nochmal ?



  • Über die Forensuche gefunden:

    void ignore(void) { //Eingabepuffer leeren
      int c; 
      while ( (c=getchar()) != '\n' && c != EOF); 
    }
    

    Nur eine Möglichkeit...



  • bevor ich meine lösung bringe, möchte ich noch sagen dass das hier wohl die dämlichste lösung is, aber ich mir des halt durch experimentieren so angewöhnt habe. sollte man nur benutzen wenn man das programm testet, aber niemals im release, denn das is echt sau umständlich auch für die bedienung:

    ich lasse einfach noch eine eingabe abfragen durch cin und auf einen string speichern

    string meinString;
    cin >> meinString;
    //programm endet nach eingabe + enter
    

    alex



  • Da musst du aber noch irgendwas eingeben. Einfach Enter drücken reicht nicht. Ist also wirklich nicht so optimal... 🙂



  • Also ich nehme immer system("PAUSE"); oder

    int schrott;
    cout << "Wird Beendet.\n";
    std::cin >> schrott;
    


  • Mit

    for(;;);
    

    geht's auch.


Anmelden zum Antworten