automatisches schließen von c++ programm verhindern!
-
Hallo
cin.get(); funktioniert nicht! Weshalb schließt mein Fenster automatisch so das ich mein Ergebnis nicht anschauen kann?
Ich brogrammiere mit Visual Studio 2008 eine win 32 Konsolenanwendung!
Hier der nicht funktionierende Quelltext :
#include "stdafx.h" #include "stdafx.h" #include <iostream> using namespace std; int main() { float x = 0, y = 0, s = 0; // Eingabeaufforderung cout << "Bitte geben Sie 2 beliebige Zahlen ein: " << endl; cout << "Zahl 1:\t"; cin >> x; cout << "Zahl 2:\t"; cin >> y; // Summenberechnung s = x + y; // Ergebnisausgabe cout << "Die Summe von " << x << " und " << y << " betraegt: " << s << endl; cin.get(); return 0; }
wo liegt mein Fehler?
Gruß
-
Schau mal in die FAQ da gibts ein Beitrag dazu
-
Weil hoechstwahrscheinlich noch ein Zeichen "im
cin
", aber ich kenn mich damit nicht weiter aus, deswegen bleib ich mal ruhig...
Wenn du sowieso VC2008 benutzt, dann nimm lieber_getch();
(Headerdatei:conio.h
), das funktioniert immer, und hat noch den Vorteil, dass auf ein beliebiges Zeichen (nicht nur auf ENTER, um fortzufahren) gewartet wird (ohne echo). Oder machsystem("pause");
. Ist im Prinzip dasselbe wie_getch()
mit dem Unterschied, dass noch der Text "Beliebige Taste druecken, um fortzufahren" eingeblendet wird.
Ist halt nur beides nicht plattformunabhaengig.Also jedenfalls mach ich das immer so, um zu verhindern, dass sich das Konsolenfenster schliesst
(zumindest wenn ich den Code nicht weitergeben will).
Gruss
Cartman
-
Schreib ans ende
:
system("PAUSE");
-
Naja über die system Befehle lässt sich ja bekanntlich streiten
Lad dir Code::Blocks runter, der verhindert automatisch ein schließen der Console, keine ahnung ob er es auch einfach über nen Billigen system("pause"); macht, aber er lässt auf jedenfall schonmal offen:D
-
Firefighter schrieb:
Naja über die system Befehle lässt sich ja bekanntlich streiten
Lad dir Code::Blocks runter, der verhindert automatisch ein schließen der Console, keine ahnung ob er es auch einfach über nen Billigen system("pause"); macht, aber er lässt auf jedenfall schonmal offen:D
Praktisch fuers schnelle testen
Schade, dass das nicht auch in MSVC implementiert ist.Gruss
Cartman
-
Eric Cartman schrieb:
Schade, dass das nicht auch in MSVC implementiert ist.
In Microsofts IDE steht die Tastenkombination F5 oder der gefüllte grüne Pfeil für den Start des Debuggers. Ist kein Haltepunkt gesetzt läuft Programm durch und die Konsole schließt sich wieder.
Strg+F5 (auch ein grüner Pfeil, aber nicht ganz gefüllt) hingegen startet das Programm ohne den Debugger, aber im Falle einer Konsolenanwendung mit einem Hinweis nach Programmende eine beliebige Taste zu drücken.
-
Eric Cartman schrieb:
Praktisch fuers schnelle testen
Schade, dass das nicht auch in MSVC implementiert ist.Gruss
CartmanMicrosofts Visual C++ 2008 Express Edition kann auch das "automatische Schließen" eines C++-Programms verhindern. Einfach in der Menüleiste auf Debuggen und anschließend auf Starten ohne Debugging klicken oder alternativ STRG + F5 drücken.
Edit: Hmpf, zu langsam...
-
@Mizar
Kein Grund gleich traurig zu sein.P.S: Soweit mir bekannt galten und gelten diese beiden Tastenkombinationen nicht nur für die Express-Edition. Früher war aber Strg+F5 durch ein Ausrufezeichen symbolisiert und in der Standardkonfiguration bereits mit auf der Symbolleiste. Jetzt ist standardmäßig nur der gefüllte grüne Pfeil auf der Symbolleiste, womit dann wahrscheinlich viele automatisch arbeiten ohne sich weitere Gedanken zu machen. (nur ein Vermutung von mir
)
Einer meiner ersten Aktionen ist daher fast immer diese Symbolleisten anzupassen. Man klickt dann halt manchmal doch lieber als Strg+F5 zu drücken.
-
cin.get();
Funktioniert bei dir einwandfrei, du hast nur nicht ganz verstanden was es tut. Dieser Befehl wartet auf ein Enter und schluckt es dann. Das Problem damit ist wenn du vorher schon einmal mit cin etwas eingelesen hast wie deine Variable dann fängt es das Enter davon auf. Deshalb musst du den Befehl einfach 2x verwenden, dann fängt er beim ersten mald as letzte Enter ab und das 2. mal wartet dann auf ein neues Enter.
-
Oder ganz einfach den Buffer von cin leer machen
-
Firefighter schrieb:
Oder ganz einfach den Buffer von cin leer machen
Sicher, ganz einfach. :p
Hier gibts zum Beispiel einen Thread dazu.
-
Hrrrr...da war wieder der Mann mit der Goldwage da :p. Nein da hast du natürlich Recht, C++ macht es einem nie einfach.
-
Firefighter schrieb:
C++ macht es einem nie einfach.
"Nie" finde ich jetzt arg übertrieben. Vergleicht man zum Beispiel mit C...
-
Xebov schrieb:
cin.get();
Dieser Befehl wartet auf ein Enter und schluckt es dann. Das Problem damit ist wenn du vorher schon einmal mit cin etwas eingelesen hast wie deine Variable dann fängt es das Enter davon auf. Deshalb musst du den Befehl einfach 2x verwenden, dann fängt er beim ersten mald as letzte Enter ab und das 2. mal wartet dann auf ein neues Enter.
#include "stdafx.h" #include <iostream> using namespace std; int main () { float a=0,b=0,c=0,e=0,f=0; cout << "geben sie 4 zahlen ein die ersten beiden werden addiert"<<endl; cin >>a; cin >>b; cin >>e; cin >>f; c=a+b; cout << "das ergebniss ist :"<<c<<endl; cin.get(); cin.get(); return 0; }
nach dem Zitat oben bräuchte ich bei diesem Beispiel aber dann mehr als zwei "cin.get();"
weshalb reichen hier zwei??
-
Am besten leerst du den Puffer voher.