# Konsole schließt sich sofort



## Piesbruhder (10. Juni 2002)

Hallo Freunde! Ich bins mal wieder, war ja ein paar Wochen nur
Zuschauer. Also, mich belästigte das Problemchen schon länger
aber jetzt will ich endlich wissen was ich tun kann.

Wenn ich z.B. ein HelloWorld-Programm schreibe (Wollt ihr einen
Sourcecode damit ihr wisst was ich meine?   )dann öffnet sich
die Konsole (oder auf deutsch: ein fenster mit schwarzem Hintergrund)
und es wird etwa eine halbe Sekunde lang HELLO WORLD! angezeigt.
und sofort schließt sich das Fenster wieder.
Aber in Tutorials und Dokumentationen steht am ende immer sowas wie
BELIEBIGE TASTE DRÜCKEN... oder sowas, wisst ihr?

Das alles ist so unter WindowsME aber früher auf Win98 wars genauso.
Compiler is VC6 Autorenversion. Aber auf meinem alten Win98 hatte ich
auch mal die StandartEdition zum ausprobieren drauf und es war genauso.
Was kann ich tun?  

Ich hoffe dass mir jemand helfen kann. bis demnächst!


----------



## Dario Linsky (10. Juni 2002)

klar, denn bei diesem code hier...

```
#include <stdio.h>

int main(int argc, char *argv[])
{
  printf("Hello, World!\n");
  return 0;
}
```

...ist nach der printf-anweisung das programm auch schon zu ende (gibt aber vorher noch einen wert zurück).

du kannst das programm offen halten, indem du vor ende der main-funktion noch 

```
getch();
```
benutzt. ist zwar nicht ansi-konform, aber funktioniert.


----------



## Robert Martinu (10. Juni 2002)

Drück mal <ctrl>+<F5> bzw. "Programm ausführen" statt "ausführen".


----------



## Piesbruhder (11. Juni 2002)

Daishi du bist ein Genie!    
es funzt...
DAnKE!


----------



## Nitromaus (16. Juni 2002)

> _Original geschrieben von Daishi _
> *Drück mal <ctrl>+<F5> bzw. "Programm ausführen" statt "ausführen". *



Sorry, aber ich versteh nicht was du damit meinst.


----------



## Robert Martinu (16. Juni 2002)

Üblicherweise startet man das Programm mit <F5>;
Die enstsprechenden Icons in der Werkzeugleiste währen eine bedruckte Seite mit Pfeil nach unten für <F5> und ein rotes Rufzeichen für <ctrl>+<F5>


----------



## Totobuvika (12. Dezember 2010)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char txt[81];
  void *pointer;

  while(1) { //Endlosschleife
    pointer = strstr(txt, "exit");    
    if(pointer) {
      break; //Schleife abbrechen
    }     
    printf("Bitte eine Zeichenkette eingeben (max. 80 Zeichen)!\n\n");
    scanf("%80s", txt);
    printf("\nZeichenkettenlaenge: ");
    printf("%d", strlen(txt));
    printf("\nDu hast eingegeben: ");
    printf("%s", txt);
    printf("\n\n");
  }

  exit(0);	
  return 0;
}


----------



## sheel (12. Dezember 2010)

Und? Was ist das jetzt?


----------



## Totobuvika (12. Dezember 2010)

Das eigentliche Programm wird in eine While-Schleife gepackt. Als Abbruchbedingung dient eine bestimmte einzugebende Zeichenfolge, im Beispiel „exit“. Also, beim Einlesen dieser Zeichenfolge verlässt das Programm die Schleife, und mit dem Befehl exit(0); wird das Konsolenprogramm beendet und geschlossen.

system("PAUSE"); oder getch(); würden zwar das Programm nach Drücken einer Taste schließen, aber dann hat man eben leider keine Chance, weitere Eingaben zu tätigen.


----------



## sheel (12. Dezember 2010)

Kann man natürlich auch so lösen.
Aber findest du nicht, dass du 8,5 Jahre zu spät bist? 

scanf hat bei Strings übrigens ein Problem mit Whitespaces.
Und am Schluss braucht man nicht exit und return, nur return reicht auch.

Gruß


----------



## Totobuvika (12. Dezember 2010)

Ha ha, ja der Thread ist uralt. Na, und ich habe gerade kürzlich begonnen, mir C beizubringen (was mit PHP-Kenntnissen nicht all zu schwer fällt), aber dieses Anfängerproblem mit der sich selbst schließenden Konsole hatte ich eben auch.

Ich habe mir einen Wolf gesucht und eigentlich immer nur ziemlich alte Forenbeiträge gefunden, deren Lösungsansätze aber für mein Miniprogramm nicht so recht geeignet waren.

Wie ich das mit den Leerzeichen lösen soll, die bei scanf einfach nicht eingelesen werden, weiß ich leider noch nicht. Echt blöd. Mit Basic oder Pascal war das mit den Strings irgendwie alles einfacher.


----------



## sheel (12. Dezember 2010)

Fürs scanf("%s",...); kannst du die Funktion gets bzw. fgets nehmen
Statt
scanf("%s",txt);
gets(txt);
Das nimmt auch die Leerzeichen mit, hat aber dafür keine Möglichkeit zur Längenangabe.
Wenn der Benutzer mehr als 80 Zeichen eingibt, gibts ein Problem.

Deshalb fgets:
fgets(txt,80,stdin);

Gruß


----------



## FSA (22. Dezember 2010)

es gibte eine sehr einfache methode:

```
#include<iostream>
#include<windows.h>

using namespace std;

int main()
{
cout<<"Hello World"<<endl;

system("PAUSE");
}
```

MFG


----------



## sheel (23. Dezember 2010)

...wobei diese nicht gerade zu empfehlen ist, da sie
1) ein externes Programm benötigt
2) Immer einen Text ausgibt, auch wenn man ihn nicht will
3) Extrem langsam ist


----------



## ComFreek (30. Dezember 2010)

Wie wäre es mir cin.get()? Allerdings muss man Enter drücken, damit die Funktion beendet wird.


----------



## FSA (30. Dezember 2010)

dann musst du aber schreiben:

```
cin.ignor();
cin.get();
```

sonst schliesst sie sich wieder sofort


----------



## ComFreek (30. Dezember 2010)

Folgendes Programm funktioniert einwandfrei:

```
#include <iostream>

using namespace std;

int main()
{
    cin.get();
    return 0;
}
```
Es schließt sich sich, sobald ich ENTER drücke.
Mit cin.ignore() "ignoriert" man doch nur einfach Zeichen, die nicht im InputStream abgespeichert werden sollen. Siehe http://www.c-plusplus.de/forum/p1326764#1326764


----------



## Couchdrache (1. Januar 2012)

Hallo auch - ich bin selber Programmieranfänger und hatte das selbe Problem...

Ich lerne in Visual Studio 2010 Express per Buch und musste 2 Schritte machen,
um dieses Problem zu umgehen .

1. Rechtsklick auf Projekt ->Konfigurationseigenschaften -> Linker -> System

dort bei SubSystem per Mausklick auf Konsole /(/SUBSYSTEM:CONSOLE) stellen

2. Wenn du dein Programm ausführst, nicht auf den Debug-Pfeil klicken, sondern unter
dem Reiter Debuggen "Starten ohne Debugging" wählen.
 das wars schon - ich hoffe es hilft


----------



## sheel (1. Januar 2012)

Hi und Willkommen bei tutorials.de,

wenn du beim Projekt-erstellen Win32-Konsolenanwendung auswählst,
geht das mit dem Subsystem normalerweise von selbst.
Man muss nur das richtige Projekt aussuchen.


----------



## MrCodeMaster (9. Januar 2012)

Du kannst auch das hier verwenden:


```
int main
{
      system("PAUSE");
      return 0;
}
```

Als Ausgabe beim Konsolenfenster siehst du dann folgendes: "Drücken Sie eine beliebige Taste....."


----------



## sheel (9. Januar 2012)

Externe Prozesse verwenden, deren Funktion man mit zwei Codezeilen nachprogrammieren könnte, ist alles Andere als gut. Langsam, Speicherfressend, fehleranällig (Programm nicht vorhanden, Rechte, in dem Fall Plattformabhängigkeit etc. etc.).


----------



## MrCodeMaster (9. Januar 2012)

Hast recht ja aber ich verwend dass meistens nur zum ausprobieren und entwickle danach eine gute und schnelle Lösung.


----------



## sheel (9. Januar 2012)

Und warum nicht gleich die einmal entwickelte Lösung verwenden? ;-]


----------



## MrCodeMaster (9. Januar 2012)

Wollt nur eine andere Lösung beisteuern. Und nachdem die system Funktion relativ praktisch zum Debuggden ist wollt ich's eichfach mal vorschlagen.


----------

