[C++] Fenster schließt sich automatisch

mr.coffee

Lieutenant
Registriert
Sep. 2006
Beiträge
714
Hallo,

ich habe in der Schule den Kurs c++ und habe zu hause schon ein wenig damit angefangen.
Das Hallo Welt Programm funktioniert auch und das Fenster bleibt offen
Hier der Code:

Code:
#include <iostream>
using namespace std;

int main ()
{
    cout<<"Hello World!\n";
    cin.get ();
}

Der Befehl "cin.get ();" wartet ja auf eine Eingabe und schließt dann das Fenster.

Jetzt habe ich ein anderes Programm geschreiben und das Fenster schließt sich nach den Abfragen und gibt nicht die Zahlen wieder aus obwohl der Befehl "cin.get ();" vorhanden ist.

Der Code:

Code:
#include <iostream>
using namespace std;

int main ()
{
    int zahl;
    cout<<"Zahl: ";
    cin>>zahl;
    cout<<"Die Zahl: "<<zahl;
    cin.get ();
}

Warum ist das so?
 
AW: [C++] Fenster schleißt sich automatisch

Wie wäre es mit getch(); ? ^^

Bekommst du denn irgendwo Warnungen beim kompilieren?
 
AW: [C++] Fenster schleißt sich automatisch

Dein Code funktioniert bei mir tadellos (mit Code::Blocks + MinGW)
Vielleicht falsche Compilereinstellungen o.ä.?
 
AW: [C++] Fenster schleißt sich automatisch

Also Folgendes.
Ich benutze die IDE Dev C++

Den code habe ich aus dem Tutorial: http://tutorial.schornboeck.net/eingabe.htm

Unso so funktioniert er nicht. Wenn er die Zahlen wiedergeben soll schließt sich das Fenster!

Wenn ich allerdings
Code:
#include <conio.h>
und
Code:
getch()

verwende funktioniert es.

doch sollte es nicht auch so wie es auf der Seite ist funktionierne? Denn normal reicht ja cin.get () ja ....
 
AW: [C++] Fenster scheißt sich automatisch an *hohoho*

Bastel doch dieses system("Pause") mit rein

__________________

#include <iostream>


int main()
{
std::cout << "Hallo Welt!" << std::endl;

system("Pause");
}


PS.: Lustiger Topicname ... einfach mal das "l" (das kleine L) wegdenken und es mach noch mehr Sinn mit nem "an" am Ende ;)
 
Zuletzt bearbeitet:
WJoerg schrieb:
#include <iostream>


int main()
{
std::cout << "Hallo Welt!" << std::endl;

system("Pause");
}

Das funktioniert bei mir auch... aber dazu mal ne andere Frage...

Das geht doch auch einfach so:
Code:
cout<<"Hallo Welt!"<<endl;
wo ist der Unterschied?
EDIT---------------------
Ok das mit dem
Code:
system("Pause");
funktioniert. Dann hat das der Ersteller des Tutorials wohl vergessen odeR?

Und wenn ich mein Programm in der Konsole öffne und nicht in der IDE oder die eXE selber dann geht es auch.
 
Zuletzt bearbeitet von einem Moderator: (Doppelpost zusammengeführt, bitte "Ändern" - Button nutzen.)
AW: [C++] Fenster schleißt sich automatisch

Ähh... ähh... keine Ahnung was das da macht.
Mein eigentliches ist eigentlich auch so kurz... hab nur gerade ne Kopie von nem Schüler hier. :lol:

Eventuell können das die C#-Pro's (lol Zebra's) besser erklären.
Sry.

Edit1:
Mein erstes Prog ...

________

#include <iostream.h>

int main()
{

cout<<"Ausgabe"<<endl;


system("pause");
return 0;
}


Edit2:

Mein 19. Programm :p
.txt in .cpp ändern ... nee, ist kein Virus.
 

Anhänge

  • 19_TR SWITCH CHAR Restart bei Div0 Neustart.txt
    2,3 KB · Aufrufe: 207
Zuletzt bearbeitet:
AW: [C++] Fenster schleißt sich automatisch

Hallo,

cin.get() liest das was im Tastaturpuffer drinsteht, und verlangt als abschliessendes Zeichen die Enter-Taste. Kann es sein dass die noch irgendwo im Puffer drinhängt, und das cin.get() quasi die Entertaste abkriegt, die Du zum Abschluss drückst, wenn Du die Zahl eingibst?

Versuch mal folgendes:
Code:
#include <iostream>
using namespace std;

int main ()
{
    int zahl;
    cout<<"Zahl: ";
    cin>>zahl;
    cout<<"Die Zahl: "<<zahl;
    cin.clear();
    cin.get ();
}

//EDIT
Hier gerade etwas gefunden was meine Vermutung bestätigt. Bei Zahleneingaben soll man cin.clear() verwenden:
http://home.snafu.de/j.kubiak/lehre/progdemos/eingabe_cpp.html

Gruß
 
Zuletzt bearbeitet:
AW: [C++] Fenster schleißt sich automatisch

Nein geht nicht. Fenster schließ sich sofort wieder. Aber wie gesagt nur in der IDE... wenn ich cmd eingebe und das Programm aufrufe geht es.
 
AW: [C++] Fenster schleißt sich automatisch

Hi

Ich hab selber vor kurzer zeit mit schörnbecks tut angefangen :)
Natürlich hab auch ich das Problem mit dem Schließen des Fensters, und auch ich kann mir mit system("pause") helfen, nur: Ich hab dieses Thema auch mal mit einem Freund geklärt und sowohl der als auch diverse Googleseiten raten von dem Befehl ab. Ist ja auch ganz klar, weil system("pause") machts nichts anderes als aus dem c++ proggi die Windows cmd aufzurufen und dort den Befehl "pause" einzugeben. Und dass das Mehr als unsauber ist, ist auch mir klar.

Daher bin auch ich immer noch auf der Suche nach einer sauberen Methode, um das Schließen zu verhindern :(
 
AW: [C++] Fenster schleißt sich automatisch

Das mit dem
Code:
system("pause");
schlag dir mal wieder ganz schnell aus dem Kopf. Betriebssystemabhängige Befehle können sehr heimtückisch sein...
 
AW: [C++] Fenster schleißt sich automatisch

Diese ganzen Geschichte mit system("pause") ist einfach nur Pfusch!
Wenn du Programmieren lernen willst, dann mach es gleich richtig.
Das Problem ist nicht der Code sondern deine Einstellung in der IDE.
Such mal in deinen Settings nach einer Möglichkeit, wo du Parameter für die Kommandozeile (nicht das Programm!) übergeben kannst und trag dort /K ein.
Dieser Parameter verhindert, dass sich die Konsole automatisch schließt.

Edit:
Gleiches gilt auch für getch(), cin.get(), cin << var, ...
 
Zuletzt bearbeitet:
AW: [C++] Fenster schleißt sich automatisch

Aber was heißt unsauber?
Wird dabei die CPU zerstört?

Das ist eine ernsthafte Frage. :freaky:
 
Zitat:
Zitat von WJoerg Beitrag anzeigen
#include <iostream>


int main()
{
std::cout << "Hallo Welt!" << std::endl;

system("Pause");
}
Das funktioniert bei mir auch... aber dazu mal ne andere Frage...

Das geht doch auch einfach so:
Code:

cout<<"Hallo Welt!"<<endl;

wo ist der Unterschied?

Der Unterschied is das du einmal using namespace std; brauchst und wenn du std:: vorne dran schreibst nicht. Da cout, cin, etc. in diesem namespace (std) definiert sind.
 
WJoerg schrieb:
Aber was heißt unsauber?
Wird dabei die CPU zerstört?

Das ist eine ernsthafte Frage. :freaky:
Du verwendest statisch Funktionalitäten aus dem Betriebssystem. Für kleine Programme bzw Einsteigerprogramme ist das sicherlich weniger von Bedeutung, aber der Stil ist einfach dann unsauber, weil man jede Möglichkeit der Portabilität verliert. Wenn Du zB Windows-Funktionen so verwendest, dann wirst Du das Programm niemals auf zB Linux compilen können.

Und jetzt könnt ihr auf mich einprügeln, jetzt kommt nämlich sicher das Argument dass das ja wohl egal sei, weil Einsteigerprogramm, ausser Windows wird sowieso kein anderes OS von euch benutzt, etc etc. Fakt bleibt es meiner Meinung nach trotzdem: Die Verwendung des system()-Befehls ist unsauber. :D
 
Unsauber heißt, dass dich Workarounds und irgendwelche komischen Hacks früher oder später wieder in irgendeiner Art und Weise wieder einholen.

zB. möchtest du eine Batch Datei schreiben, die mehrere Programme hintereinander abarbeitet. Nur kommt diese nicht sehr weit und bleibt nach diesem Programm stehen, da auf eine Eingabe gewartet wird. Nur um eine Möglichkeit zu nennen...
 
@PepperJo
^^
Da muss erst ein "Dahergelaufener" (Hallo bei CB/FB!) kommen um das zu erklären.

Danke!


@ "Unsauber"
Alles klar, BS-Kompatibilität und Batch-Datei-Funktionalität verstehe ich. Danke!
 
Zuletzt bearbeitet:
Zurück
Oben