C++ Programm soll sich nicht sofort schließen!
-
ich bins schrieb:
std::cin.get() funktioniert auch für Anfänger.
Das macht was anderes als system("pause"). Und braucht mehr unverständlichen Code, um verlässlich zu funktionieren. Darum geht's ja gerade.
Eigentlich müsste man ja bei system("pause") auch den Fehlercode prüfen, ob das erfolgreich war.
Ähm... was? Wieso? Soll man dann auf andere Art auf eine Taste warten?
Swordfish schrieb:
Ich geb' auf und empfehl' ab heute einfach
Ja, das ist total raffiniert.
Das macht den Newbie froh.
-
Es funktionier auch, am Ende der main() cin.get() zu schreiben und für den Fall, daß das Programm Eingaben verlangte, und deswegen ein '\n' noch rumgammelt, schreibt man ein zweites cin.get() hin.
-
...
-
Belli schrieb:
Ich bleibe dabei:
Startet ein Konsolenprogramm aus einer Konsole, dann erübrigt sich sämtliche Trickserei im Programm.+1

Das eigentliche Problem ist nicht, wie man das Programm am besten daran hindert, zu beenden. Das Problem ist, dass überhaupt darüber nachgedacht wird, das Programm daran zu hindern, sich zu beenden, wenn es beenden sollte.
Setz in deiner IDE einen Breakpoint auf das return in main() und fertig.
-
markaber schrieb:
bool pause() { using namespace std; // system() must either be in std:: or in global namespace // Swordfish relies on having both, ::system() and std::system()Actually system must be in namespace std (or a namespace nested in std), but may also be found in the global namespace.
-
dot schrieb:
Setz in deiner IDE einen Breakpoint auf das return in main() und fertig.
Genau. Und dann möchte ich im Release-Build auch mal die Ausgabe sehen, bevor sich die Konsole schließt. was mach ich dann? Die Projekteinstellungen für Release anpassen?

-
Man muss bei VS einfach nur das Projekt als "Konsolenapplikation" linken (unter System->Subsystem) und strg+f5 drücken. (Andere IDEs haben das "Problem" glaube ich nicht mal?)
-
cooky451 schrieb:
Man muss bei VS einfach nur das Projekt als "Konsolenapplikation" linken (unter System->Subsystem) und strg+f5 drücken. (Andere IDEs haben das "Problem" glaube ich nicht mal?)
Hatten wir schon. Mein Gegenargument: damit kannst du nicht debuggen. Du musst also ständig zwischen verschiedenen Methoden wechseln.
-
Also ich debugge meist mit Haltepunkten. Hat den Vorteil, dass die Applikation sich so lange nicht beendet, wie ich das will

Die ganz Verrückten setzen sich ne wartende Semaphore vor das Return

-
_matze schrieb:
Hatten wir schon. Mein Gegenargument: damit kannst du nicht debuggen. Du musst also ständig zwischen verschiedenen Methoden wechseln.
Dass man damit nicht debuggt, ist doch der Sinn. Da verstehe ich das Argument nicht.
Man will nicht debuggen -> lässt das Programm durch laufen, oder man will debuggen -> wird ja irgendwo in den Sourcecode geschmissen.
-
Ok, andersrum: wo ist bei kleinen Testprogrämmchen der Vorteil der STRG+F5/F5-Wechsel-Methode zu einem simplen system("pause") am Ende? Ich sehe keinen (ich sehe sogar kleine Nachteile), außer dass ich mir von euch nicht anhören muss, wie böse und nicht portabel system ist, was mir bei einem nicht-produktiven Testprojekt so ziemlich scheißegal ist.

-
_matze schrieb:
Ok, andersrum: wo ist bei kleinen Testprogrämmchen der Vorteil der STRG+F5/F5-Wechsel-Methode zu einem simplen system("pause") am Ende? Ich sehe keinen (ich sehe sogar kleine Nachteile), außer dass ich mir von euch nicht anhören muss, wie böse und nicht portabel system ist, was mir bei einem nicht-produktiven Testprojekt so ziemlich scheißegal ist.

Hä??
Wo ist der Nachteil?
Außerdem ist Strg+F5/F5 nicht Debug/Release, sondern Ohne-Debugger-Starten/Mit-Debugger-Starten.
system("pause") sorgt zum Beispiel dafür, daß ich das vom TO so nett gemachte fertige Testprogrämmchen nicht unrter Linux testen kann. Also lasse ich es. Wenn er nichtmal diese Grundhöflichkeit hat, soll ihm doch jemand anderer helfen.
-
_matze schrieb:
dot schrieb:
Setz in deiner IDE einen Breakpoint auf das return in main() und fertig.
Genau. Und dann möchte ich im Release-Build auch mal die Ausgabe sehen, bevor sich die Konsole schließt. was mach ich dann?
Einen Haltepunkt auf das return in main() setzen...
-
dot schrieb:
Einen Haltepunkt auf das return in main() setzen...
Klar, geht natürlich. Dann ist der Fokus aber auch auf dem VS, wo ich doch eventuell die Konsolenausgabe sehen möchte. Nicht dramatisch, aber ein Klick mehr. Das meine ich halt. All die "Workarounds", um bloß nicht das böse system zu benutzen, sind eventuell ein wenig unkomfortabler, um letztendlich die gleiche Funktion für mich zu erfüllen. Dabei will ich doch nur in meinem kleinen Testprojekt am Ende der Ausführung die Ausgabe sehen, mehr nicht. Und system("pause") erfüllt meine Anforderungen nun mal am besten, bei ziemlich geringem Aufwand (eine kurze Zeile tippen, genau wie auch ein unnötiges return in der main) und in solchen Testprogrammen nicht für mich nachvollziehbaren Nachteilen.
Ach, kommt. Ich hab keine Lust mehr. Wir drehen uns ja doch nur wieder im Kreis.

-
_matze schrieb:
Ach, kommt. Ich hab keine Lust mehr. Wir drehen uns ja doch nur wieder im Kreis.

Nur, weil Du nicht einsichtig bist.

-

-
Das Problem ist halt, dass du damit die Funktionalität des Programmes veränderst, nur um es komfortabel debuggen zu können, was streng genommen bedeutet, dass du ein anderes Programm debuggest, als das, was du dann einmal releasen wirst.
Auf den ersten Blick eine irrelevante Kleinigkeit. Aber leider halt nur so lange irrelevant, bis sie relevant wird, z.B. weil du, als du 5 min. vor Mitternacht zum letzten Mal abgegeben hast, im ganzen Stress vergessen hast, die eine Zeile auszukommentieren, was nun dazu führt, dass dein Programm auf dem automatischen Testsystem blockiert, vom Timeout gekilled und mit 0 Punkten bewertet wird...
-
dot schrieb:
Das Problem ist halt, dass du damit die Funktionalität des Programmes veränderst, nur um es komfortabel debuggen zu können, was streng genommen bedeutet, dass du ein anderes Programm debuggest, als das, was du dann einmal releasen wirst.
Und ich rede die ganze Zeit von Programmen, die niemals nicht released werden. Achtung, gleich kommt das Gewohnheitsargument.

Keine Lust mehr. Hatte ich das schon gesagt?

-
_matze schrieb:
Und ich rede die ganze Zeit von Programmen, die niemals nicht released werden. Achtung, gleich kommt das Gewohnheitsargument.

Dann gewöhnst du dir an, wie man es nicht richtig macht und lernst die ganzen kleinen Kniffe nicht, die dir bei "richtigen" Programmen das Leben erleichtern

-
_matze schrieb:
Achtung, gleich kommt das Gewohnheitsargument.

Jap, wär ja nicht so, dass ich mir obiges Beispiel aus der Nase gezogen hätte. Wenn ich für jedes Mal, wenn einem Student sowas passiert, einen Euro bekommen würd, dann hätte das vermutlich signifikanten Einfluss auf mein Jahreseinkommen... :p