PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein Programm schließt sich dauernd - Antwort



blackberry
02.06.2009, 20:02
Ich kann zwar nicht ganz fassen, dass ich das hier zum Sticky machen muss, aber hier ist mein Standpunkt:
Es wird immer und immer wieder gefragt warum sich ein Konsolenprogramm unter Windows sofort (bzw. nach vollendeter Eingabe) wieder schließt.

Da diese Frage ebenfalls schon x-Mal beantwortet wurde, werde ich in Zukunft solche Fragen einfach löschen und ggf. eine Verwarnung aussprechen (Grundlage; § 2.1, § 2.4: Boardregeln).


Folgende Resultate erhielt ich (02.06.2009, 20:47) bei der Suche nach:
programm schließt sich
wobei vBulletin zu "sich" folgendes sagte:
Die folgenden Wörter sind sehr allgemein und wurden in der Suchanfrage ignoriert: sich

http://free-hack.com/showpost.php?p=272306&postcount=1
http://free-hack.com/showpost.php?p=179119&postcount=1
http://free-hack.com/showpost.php?p=131047&postcount=1
http://free-hack.com/showpost.php?p=43996&postcount=1
http://free-hack.com/showpost.php?p=11221&postcount=1
(es gibt mehr - uA. deshalb, weil so mancher User keinen treffenden Titel wählt)

Wer sich nicht die Mühe machen will jeden dieser Threads einzeln durchzuarbeiten kann gerne weiterlesen:

Das Programm schließt sich weil die Ausführung zu ende ist.
Wieso sollte es danach auch offen bleiben?

Um das zu verhindern kann man folgende Codes benutzen (es gibt natürlich sehr viele Lösungen - die folgenden sind nur ein paar davon):

1)
#include <stdlib.h>
bei den Include's einfügen und
system("PAUSE");
( oder system("PAUSE > NUL"); )
am Ende der main-Funktion einfügen.
(ACHTUNG: dieser Code ist nur für Windows, da das PAUSE-Programm auf anderen Systemen nicht existiert - Außerdem angreifbar mit Path-Attacks - sollte vermieden werden)

2)
#include <conio.h>
bei den Include's einfügen und
getch();
am Ende der main-Funktion einfügen.
(ACHTUNG: der Header conio.h und die in ihm deklarierte Funktion getch() sind kein Standard - dieser Code wird auf nicht-Windows-Systemen nicht compilieren)

3)
#include <stdio.h>
bei den Include's einfügen und
getc(stdin);
oder
getchar();
am Ende der main-Funktion einfügen.
(diese Variante sollte auf allen Systemen funktionieren, wartet aber gezielt auf das Drücken der ENTER-Taste - deshalb habe ich diese Methode zuletzt aufgeführt)

4) vorgeschlagen von wacked ( http://free-hack.com/member.php?u=54497 )
#include <iostream.h>
bei den Include's einfügen und
std::cin.get();
oder:
using namespace std; (nach den Include's einfügen)
und
cin.get();
am Ende der main-Funktion einfügen.
(ACHTUNG: iostream macht euer Programm sehr groß. Wenn ihr iostream jedoch sowieso einsetzt macht das natürlich keinen Unterschied. Sollte auf allen Systemen funktionieren)
______________________________

Die Windows-spezifischen Lösungen stehen oben, da Linux-Benutzer ihre Programme ja sowieso über die Befehlszeile aufrufen und dieses Problem nicht haben werden.


mfG. BlackBerry

$_staX
02.06.2009, 20:04
Oder Programm per Konsole starten, was auch unter windows geht ;)

sp33dwalker
02.06.2009, 20:10
Man braucht doch gar nicht die stdlib.h für system("PAUSE"); ,oder?

nathex
02.06.2009, 20:16
Man braucht doch gar nicht die stdlib.h für system("PAUSE"); ,oder?
Doch, entweder braucht man cstdlib (aka. stdlib.h) oder iostream, welcher die Standard-Library direkt mit inkludiert

blackberry
02.06.2009, 20:19
Was brauchst du denn dann?
iostream?

Der iostream-Header, den ich kenne inkludiert cstdlib, welches die C++ Variante von stdlib.h ist, welches uA. diese Funktion deklariert:
int system ( const char * command );


Nö, braucht man nicht!

Eben doch.

nathex
02.06.2009, 21:09
Der iostream-Header, den ich kenne inkludiert cstdlib, welches die C++ Variante von stdlib.h ist, welches uA. diese Funktion deklariert:
int system ( const char * command );Okay, dann sorry für die falsche Antwort. Ich habe bei einfachen Konsolenprogrammen immer nur den iostream-Header inkludiert, und wusste nicht, dass der in Zusammenhang mit cstdlib steht.
Wieder was dazu gelernt ;) Danke :)

#edit: So habs korriegiert, jetzt müsste es doch stimmen, oder? :)

busted_rebel
05.06.2009, 17:00
2)
#include <conio.h>
bei den Include's einfügen und
getch();
am Ende der main-Funktion einfügen.
(ACHTUNG: der Header conio.h und die in ihm deklarierte Funktion getch() sind kein Standard - dieser Code wird auf nicht-Windows-Systemen nicht compilieren)


ich finde die 2te methode am besten
und am einfachsten
wahrscheinlich weil ich seit anfang meiner c++ kariere damit arbeite

mfg

Blue-Fox
05.06.2009, 17:15
Danke für das TuT, da ich immer vergesse wie der Befehl heist :D

Aber immernoch ist die 3. Variante am Besten!

wacked
13.06.2009, 08:07
warum nicht cin.get() aus iostream? funzt bei windows perfekt.

blackberry
13.06.2009, 12:40
Ok ist dabei (Punkt 4).