# Konsolenfenster in Visual C++ offen halten?



## Party4Life (26. Mai 2007)

Hallo, 

meine Frage: welchen Befehl benötige ich, um das Konsolenfenster offen zu halten und das automatische Schließen zu verhindern?

Eingebunden habe ich bisher:

#include <iostream.h>
#include <conio.h>
#include <stdio.h>

Gruß
Party


----------



## Thomsn (26. Mai 2007)

Nimm einfach ne Datenabfrage, die auf Eingabe wartet.
Oder sowas wie getch()...

Die Headerdateien sehen übrigens etwas komisch aus. stdio.h ist ne C-typische Datei. iostream.h ist eine veraltete Version der eigentlichen C++-Datei iostream, die heute eigentlich nicht mehr genutzt wird. Wenn ich mich jetzt nicht irre...


----------



## Party4Life (26. Mai 2007)

Thomsn am 26.05.2007 23:22 schrieb:
			
		

> Nimm einfach ne Datenabfrage, die auf Eingabe wartet.
> Oder sowas wie getch()...
> 
> Die Headerdateien sehen übrigens etwas komisch aus. stdio.h ist ne C-typische Datei. iostream.h ist eine veraltete Version der eigentlichen C++-Datei iostream, die heute eigentlich nicht mehr genutzt wird. Wenn ich mich jetzt nicht irre...



Wo muss ich getch() denn platzieren?
Ich hab wirklich einen billigen Code (bin am Anfang eines C++-Buches):

#include <iostream.h>
#include <conio.h>
#include <stdio.h>

int main()
{
	cout << "Hello World\n";

	return 0;
}

Wo muss das getch() nun hin? Hinter "return 0"?

Ich hab statt iostream.h mal nur iostream geschrieben, bekomme dann aber eine Fehlermeldung.
Bei Visual c++ Express funktioniert das aber, soweit ich weiß.


----------



## Thomsn (26. Mai 2007)

Party4Life am 26.05.2007 23:36 schrieb:
			
		

> Wo muss das getch() nun hin? Hinter "return 0"?


Nein, davor, aber wieso probierst Du es nicht einfach aus? *g* Du kannst ja nix kaputt machen oder so. 

EDIT: Irgendwie fehl in Deinem Sourcecode übrigens noch das mit dem Namensraum.
Du müsstest entweder vor das cout noch ein std:: (also std::cout) schreiben, oder vor der Main-Funktion ein using std::cout oder ein using namespace std;.


----------



## Party4Life (26. Mai 2007)

Thomsn am 26.05.2007 23:42 schrieb:
			
		

> Party4Life am 26.05.2007 23:36 schrieb:
> 
> 
> 
> ...



Ich habs nun vor "return 0" platziert. Das Fenster ist offen, wenn ich das Programm vom Quellcode heraus aufrufe.
Aber wie kann ich das Fenster offen halte, wenn ich es vom Verzeichnis her öffne? Da funktioniert es leider noch nicht.

Bsp.: ich schreibe eine Konsolenanwendung, die wie ein Taschenrechner Zahlen berechnen soll.
Wenn ich das Programm nun weitergeben würde, dann muss die Konsolenanwendung ja offen bleiben.
Wie bekomme ich das hin?


----------



## Thomsn (26. Mai 2007)

Ersetze mal das getch() durch cin.getch().

EDIT: Stell aber sicher, dass Du das mit dem Namespace geregelt hast. cin gehört auch zu std.

(also entweder 'using namespace std', 'using std::cin;' oder 'std::cin...')


----------



## Party4Life (27. Mai 2007)

Thomsn am 26.05.2007 23:57 schrieb:
			
		

> Ersetze mal das getch() durch cin.getch().
> 
> EDIT: Stell aber sicher, dass Du das mit dem Namespace geregelt hast. cin gehört auch zu std.
> 
> (also entweder 'using namespace std', 'using std::cin;' oder 'std::cin...')



Mein Code sieht mittlerweile wie folgt aus:

#include <iostream.h>
#include <conio.h>
#include <stdio.h>

using namespace std;
using std::cin;

int main()
{

	cout << "Hello World\n";


	return 0;
	cin.getch();
}

Nur leider bekomme ich jetzt 4 Fehlermeldungen; eine besagt z. B., dass "std" nicht existiert oder gar kein Namespace ist.
Was tun?


----------



## Zeitkind (27. Mai 2007)

Party4Life am 27.05.2007 02:05 schrieb:
			
		

> Mein Code sieht mittlerweile wie folgt aus:
> 
> #include <iostream.h>
> #include <conio.h>
> ...



Die Funktion *getch()* gehört vor *return 0*. Alles was nach dem return steht, wird in diesem Fall nicht mehr bearbeitet. Das dein Fenster noch offen ist, wenn du es ausm Visual Studio startest ist normal.. da wartet die Konsole immer noch auf nen Tastendruck, bevor sie sich verabschiedet.



			
				Party4Life am 27.05.2007 02:05 schrieb:
			
		

> Nur leider bekomme ich jetzt 4 Fehlermeldungen; eine besagt z. B., dass "std" nicht existiert oder gar kein Namespace ist.
> Was tun?



Hm, also *std* ist eigentlich ein prima namespace. Das dein VC++ da nichts findet, kann eigentlich nur an einem der folgenden Punkte liegen (sofern ich da nix vergessen habe):

- Du benutzt die Visual Studio C++ 6.0 Version. Hier gabs das ganze Namespace Gedöns meines Wissens noch nicht so ausgeprägt, bzw. wurde für funktionierenden Code vorausgesetzt.. deswegen wirst du hier mit dem Namespace kein Glück haben. (Vielleicht hast du den Beispiel Code auch einfach nur aus einem alten Buch (wegen iostream.h)

- Du benutzt NICHT die oben genannte Version. Dann solltest du aber kein *#import <iostream.h>* machen, sondern diese Zeile in *#import <iostream>* umändern. Sonst findet er den entsprechenden Header nicht.

Hmm, eigentlich glaub ich, dass mir gerade eben noch ein Grund im Kopf herumgeisterte, aber irgendwie hab ich den mittlerweile schon wieder vergessen *arg. Ändere dein Programm mal wie folgt:



> #include <iostream>
> #include <conio.h>
> 
> using namespace std;
> ...



Damit sollte es zumindest bei den neueren VS Compilern ohne murren compilieren (habs selbst gerade getestet). Zur Not haust du hier einfach mal alle deine Fehlermeldungen rein.. sonst kann man nur raten warum bei dir was nicht funktioniert


----------



## Thomsn (27. Mai 2007)

Zeitkind am 27.05.2007 07:52 schrieb:
			
		

> Ändere dein Programm mal wie folgt:
> 
> 
> 
> ...


Hm, ich hätte eher gesagt:

```
#include <iostream>

using namespace std;

int main() {
   cout << "Hello, World\n";
   cin.getch();
   return 0;
}
```
Der Rest wäre doch überflüssig. Vor allem das 'using std::cin;' nachdem man eh schon 'using namespace std;' verwendet hat.

@Threadstarter: Wenn Dein Compiler damit Probleme macht, kann ich Dir nur raten, einen anderen zu verwenden. Ich weiß nicht, inwieweit die Visual-C++ Programme von Microsoft sich da vom normalen C++-Standard unterscheiden, aber wenn Du C++ lernen willst, ist das vielleicht nicht so ideal.

Schau Dir eventuell mal den _GCC_ oder _Dev-C++_ (bzw. seinen dort erwähnten Nachfolger) an. Damit solltest Du wirklich standardkonform C++ programmieren können.


----------



## Mothman (27. Mai 2007)

Also die Methode getch() klappt oft, aber leider nicht in allen Fällen. Sie ist also unzuverlässig.
Eine Lösung, die immer klappt, findest du hier:

http://www.c-plusplus.de/forum/viewtopic-var-t-is-111042.html

Gruß


----------



## Party4Life (27. Mai 2007)

Zeitkind am 27.05.2007 07:52 schrieb:
			
		

> Die Funktion *getch()* gehört vor *return 0*. Alles was nach dem return steht, wird in diesem Fall nicht mehr bearbeitet. Das dein Fenster noch offen ist, wenn du es ausm Visual Studio startest ist normal.. da wartet die Konsole immer noch auf nen Tastendruck, bevor sie sich verabschiedet.
> 
> 
> 
> ...



Mit dem Code von Zeitkind hat es funktioniert.
Ich benutze aber Visual C++ 6. 
Das C++-Buch ist schon ziemlich alt (C++ in 21 Tagen -> wers glaubt )

@Thomsn: ist es empfehlenswerter, nicht mit Visual C++ 6 mit der C++-Programmierung anzufangen? 
Ich werde mir Dev-C++ mal anschauen.

Edit: Hab mir Dev-C++ runtergeladen, schaut ganz gut aus.


----------



## Thomsn (27. Mai 2007)

Party4Life am 27.05.2007 17:42 schrieb:
			
		

> @Thomsn: ist es empfehlenswerter, nicht mit Visual C++ 6 mit der C++-Programmierung anzufangen?
> Ich werde mir Dev-C++ mal anschauen.


Das will ich mal nicht behaupten, weil ich das Programm nicht wirklich kenne. Aber wenn es so ist, wie Du sagst, und es Probleme mit "normalem" C++-Code macht, würd ich schon lieber etwas anderes nehmen oder mich erkundigen, woran das genau liegt.


----------



## mcShredder (22. Oktober 2008)

Du kannst auch einfach system("PAUSE") benutzen!!

mit system("BEFEHL") kannst du alle Konsolenbefehle benutzen z.b. auch MKDIR.

Funktioniert auf jeden fall unter WIndows. Bei anderen Betriebssystemen weiß ich es nicht.


----------

