Consolenprogramm bricht in WinXP ab

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • Hallo!

    Ich bin relativ neu in C++ und habe das Problem dass mir Windows XP jedes (aus nagelneuem Lehrbuch stammend - erschienen 09/04) Konsolenprogramm nach der ersten Eingabe des Users mit dem bestätigen durch die [ENTER] Taste schließt. :(

    Jetzt wollte ich fragen - muss ich in WinXP auf irgendetwas besonders achten?

    Als IDE benutz ich Dev-C++ mit mitgeliefertem Compiler.

    Danke für eure Hilfe!

  • ich kann mir vorstellen, dass das daran liegen könnte, dass du nach der letzten eingabe keine weitere abrufst (So zb. "Press Enter to exit") - deswegen hält win das programm für beendet und schliesst das console window. versuch mal mit "cmd" eine konsole zu öffnen und das programm manuell ausführen - so solltest den ganzen output sehen.

    hoffe ich hab dein problem richtig interpretiert...

    lg
    wolfgang

    -------------------
    “If you hear hoof beats, you should look for horses, not zebras.”
    --
    "You, Sir, are an Idiot!" - George Hamilton

  • Hi!

    Danke erstmals für die rasche Antwort.

    Wenn ich eine weitere Ausgabe hab und dann eine Eingabe nach zum Beispiel "Y" für yes fordere - dann funktioniert das - aber das muss doch auch irgendwie anders gehn - oder? So eine Art break und dann mit Enter aussteigen?

    Das hier wäre zum Beispiel der erste Übungsquellcode aus meinem Buch:

  • Zitat von iveo


    Wenn ich eine weitere Ausgabe hab und dann eine Eingabe nach zum Beispiel "Y" für yes fordere - dann funktioniert das - aber das muss doch auch irgendwie anders gehn - oder?



    dein problem liegt _nicht_ im bereich deines programmes. dein programm wird ausgefuehrt und beendet sich. dann schaltet sich windows ein und fragt nach einer taste um das terminal zu schliessen (siehe wolfmanns posting).

    irgendwo in den tiefen der windows configurationsdialoge kann man dieses verhalten
    sicher mit einem hakerl abschalten :)

    Zitat von iveo


    Das hier wäre zum Beispiel der erste Übungsquellcode aus meinem Buch:

    dein buch scheint nicht das neueste zu sein und nebenbei nicht besonders viel
    vom c++ standard zu halten.

    [/QUOTE]

  • 1. Danke für eure Antworten und dafür, dass ihr euch mit solchen Newbie-Fragen auch rumschlägt ;)

    2. Was das Buch anbelangt - ich habe mich geirrt - es ist die erste Auflage aus 2003 (was aber auch nicht so alt ist eigentlich?) - hab es jedenfalls mit einem Linuxbuch, das vom gleichen Verlag stammt, verwechselt.
    http://www.galileocomputing.de/katalog/bueche…0834A1sX0WczDSs

    3. amok - vielleicht kommt das in meinem Buch noch? - main() wird darin jedoch nie typdefiniert - in meinem 2.ten C++ Buch, das ich jedoch als komplizierter einstufe steht eine typische "Hello World!" Ausgabe in der Console zum Beispiel so aus:

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




    wäre das "richtiger"? - sofern es sowas bei Programmiersprachen überhaupt gibt?


    4. Ich würde eigentlich gerne mit dem Galilieobuch weiterarbeiten - möchte jedoch auch nichts falsches einstudieren - sollte ich es beiseite legen und mir ein anderes Lehrbuch suchen oder kann ich dabei bleiben?
    (Ich meine das ist jetzt bestimmt schwer kalkulierbar für euch, da ihr das Buch wahrscheinlich nicht kennt - doch wenn zu grobe Fehler drin sind, dann leg ichs lieber weg!)



    Danke nochmal! :thumb:

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




    wäre das "richtiger"? - sofern es sowas bei Programmiersprachen überhaupt gibt?



    es ist zumindest strict ansi conform obwohl auch hier die alten header verwendet
    werdn (was nicht verboten ist aber langsam und sicher aus neuem codeverschwinden
    wird). die definition von main vor der declaration main ist in diesem beispiel sinnlos.

    Zitat von iveo


    4. Ich würde eigentlich gerne mit dem Galilieobuch weiterarbeiten - möchte jedoch auch nichts falsches einstudieren - sollte ich es beiseite legen und mir ein anderes Lehrbuch suchen oder kann ich dabei bleiben?
    (Ich meine das ist jetzt bestimmt schwer kalkulierbar für euch, da ihr das Buch wahrscheinlich nicht kennt - doch wenn zu grobe Fehler drin sind, dann leg ichs lieber weg!)

    wenn dir das buch gefaellt und du damit gute fortschritte machst, lerne ruhig damit
    weiter. du solltest dir aber bewusst sein dass du spaeter c++ code sehen wirst, der
    ganz anders aussieht bzw. deine programme mit unterschiedlichen compilern nicht
    ohne probleme compilierbar sein werden.

    das ist als anfaenger kein problem. wenn du allerdings ernsthaft projekte in c++
    realisieren willst solltest du dich mit literatur befassen, die sich standardkonformer
    und penibler mit der sprache auseinander setzt.

    lg
    amok

  • Zitat von iveo

    ich weiß - ist scho ewig her der post - aber ist was verkehrt daran wenn ich vor dem return 0; ein getchar(); einfüg damit er mir die konsole nicht schließt?

    Gar nix, nur an solche einfachen Lösungen denken Informatiker normalerweise nicht ;)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Zitat

    irgendwo in den tiefen der windows configurationsdialoge kann man dieses verhalten
    sicher mit einem hakerl abschalten

    Hab ich zumindest noch nirgends gesehen.

    Dass das Fenster offen bleibt, passiert nur, wenn man es unter VC++ ausführt - das wird irgendwie über vcspawn.exe gemacht.

    IMHO sollte man Konsolenprogramme von der Konsole ausführen, dann hat man dieses Problem nicht.

  • Mit diesem Eintrag in RegEdit:

    HKEY_CLASSES_ROOT\Folder\shell\Open To Dos\command\(Standard) = C:\Windows\System32\cmd.exe

    Kannst du im Explorer jetzt einfach per Rechsclick->Open To Dos auf nen Ordner ein Dosfenster fuer diesen Ordner aufmachen. Also der Pfad zeigt dann schon zu diesem Ordner und du musst nicht umstaendlich von dem Standard C:\Windows\System32\ dich erst dorthin bewegen.

    Damit hast jetzt ein Fenster in dem du dein Programm testen kannst.

    :thumb: Geschrieben nach der alten, neuen und zukünftigen Rechtschreibung! :thumb:

  • habs mittlerweile so gelöst:

    Code
    cout << "Press ENTER to continue..." << endl; 
     	  cin.get();



    weil das mit dem getchar(); nicht immer funktioniert hat - andererseits bin ich gerade wieder auf die schnautze gefallen damit - weil es anscheinend auch nicht immer funktioniert ... sowas von spanisch das ganze - ich verstehs nicht... deshalb liefer ich noch schnell 2 billigsdorfer beispiel:

    hier gehts:




    und hier gehts nicht:

  • Beim zweiten mal funktioniert´s nicht, weil dort vorher schon was eingelesen wurde. Beim Standard Eingabestream werden die Zeichen nicht direkt von der Tastatur eingelesen, sondern von einem Zwischenbuffer, in welchem sich Daten befinden (nämlich das letzte 'Return')

    Die einfachste (aber nicht sehr saubere) Lösung ist, nach jeder (bzw. nach der letzen) Eingabe einmal cin.get() aufzurufen, um das letzte 'Return' aus dem Buffer zu entfernen

    Eine andere Lösung wäre, cin nicht zu verwenden und selbst einen Eingastream zu erzeugen, welcher nicht bzw. anders als der Standardstream buffert, was hier aber zu weit führen würde.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!