Programm schließt sich immer, warum?!



  • nein, das es auf eine eingabe wartet, soviel ich weiß.



  • In Visual Studio kann man das Programm auch einfach mit CTRL-F5 starten (anstatt nur mit F5), dann bleibt das Konsolen-Fenster offen nachdem das Programm fertig ist.

    Weiß aber leider nicht ob das in anderen Compilern auch so geht...



  • void keep_window_open()
    {
        std::cout << "Press <RETURN> to close this window...\n";
        char ch = '0';
        while (ch != '\n')
            std::cin.get(ch);
    }
    

  • Mod

    hardware schrieb:

    void keep_window_open()
    {
        std::cout << "Press <RETURN> to close this window...\n";
        char ch = '0';
        while (ch != '\n')
            std::cin.get(ch);
    }
    

    Ich glaube, diese Lösung löst nur die Hälfte des Problems.



  • SLWall101 schrieb:

    Belli schrieb:

    SLWall101 schrieb:

    Belli schrieb:

    Das ist ein Konsolenprogramm! Öffne eine Konsole, navigiere in das Verzeichnis, in dem die ausführbare Datei liegt, und starte das Programm aus der Konsole!
    Die Konsole bleibt dann nach Programmende offen.

    Wie meinst du das? Soll ich das Programm praktisch aus dem CMD Fenster starten?

    Ja!

    Aber warum so unpraktisch? Kann es ja aus C++ heraus debuggen will ja da schon sehen ob alles läuft oder nicht?

    Solange Du es debuggst, sollte es ja nicht von selbst bis zu Ende laufen! Wenn es zu Ende gelaufen ist, gibts nix mehr zu debuggen!

    Im übrigen ist das nicht unpraktisch, sondern ganz normal. Man stelle sich nur mal vor, wie abends der Desktop aussähe, wenn tagsüber eine Menge Programme liefen, die alle ein offenes Konsolenfenster zurücklassen, obwohl sie längst mit ihrer Arbeit fertig sind ... 😕



  • SeppJ schrieb:

    Ich glaube, diese Lösung löst nur die Hälfte des Problems.

    Was wäre die andere Hälfte, die es zu lösen gilt?
    Ich will mit der Frage jetzt nicht blöd kommen - Ich will lediglich meine Antwort verbessern.



  • Also ich finde SYSTEM ("pause" ) in Anfängerprogrammen zum Lernen ok. Wenn man demjenigen sagt, warum man es nicht machen sollte und welche Schwierigkeiten einen da erwarten. Für privaten Gebrauch zum Lernen reicht´s, warum sollte man da also einen 4-Zeiler hinbasteln, der das plattformunabhängig löst? Die meisten Miniprogramme brauchen das nicht, weil sie doch nur in der Schule oder zu Hause übersetzt werden.



  • DocShoe schrieb:

    Für privaten Gebrauch zum Lernen reicht´s, warum sollte man da also einen 4-Zeiler hinbasteln, der das plattformunabhängig löst?

    Warum sollte man nicht eine Konsole öffnen, um das Programm zu starten?


  • Mod

    hardware schrieb:

    SeppJ schrieb:

    Ich glaube, diese Lösung löst nur die Hälfte des Problems.

    Was wäre die andere Hälfte, die es zu lösen gilt?
    Ich will mit der Frage jetzt nicht blöd kommen - Ich will lediglich meine Antwort verbessern.

    Nach einem typischen Konsolenprogramm besteht eine ziemlich hohe Chance, dass noch ein oder mehrere '\n' im cin-Stream stehen.

    So wirklich gute Lösungen wird es nicht geben, dazu passt das, was der stdin-Stream modelliert (ein abstrakter Zeichenstrom ohne jede Information über Herkunft oder Herkunftszeit der Zeichen) zu wenig zu dem, was man erreichen will (Tippen einer Taste (Eingabeströme kennen keine Tasten), jetzt und nur jetzt (Eingabeströme kennen keine Zeit)).



  • Warum nicht einfach ... ?

    std::istream::ignore(256, "\n");
    std::cin.get();
    


  • Videonauth schrieb:

    Warum nicht einfach ... ?

    Weils schon rein syntaktisch Quatsch ist??

    #include <limits>
    #include <iostream>
    
    /* ... */
    
    std::cin.clear();
    std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    std::cin.get();
    

    wennschon


Anmelden zum Antworten