Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

11

17.10.2010, 19:29

Versuch mal den Eingabepuffer zu löschen. Manchmal hängt da noch ein Enter fest, dass dann anstelle des cin.get(); ausgelesen wird und somit das Programm einfach weiter läuft.
Um den Puffer zu löschen gibt es mehrere Möglichkeiten: std::cin.clear(); std::cin.flush(); und std::cin.ignore(INT_MAX); ist auch eine Möglichkeit, wo einfach alle Zeichen innerhalb des Puffers ignoriert werden.

oder cin.sync();

12

17.10.2010, 19:36

Danke mit cin.sync(); funktioniert es.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

13

18.10.2010, 11:06

Stimmt, das geht natürlich auch. :)

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

14

18.10.2010, 11:38

Also mit STRG F5 wartet der mit dem beenden bis du Enter drückst.


Mit STRG F5 wird die Anwendung im Release Modus gestartet (Quasi so wie wenn du die exe startest), mit F5 wird noch ein Debugger drangehängt.
Es ist glaub ich sogar umgekehrt wie du beschrieben hast, beim Debuggen sollte er noch "Press any key to continue..." anhängen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

15

18.10.2010, 12:06

in vs2008 ists genau so wie es bobbafat beschrieben hat(habs eben ausprobiert)
ob das jetzt so sinnvoll ist ist eine andere frage...
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

16

18.10.2010, 12:23

Mit STRG F5 wird die Anwendung im Release Modus gestartet (Quasi so wie wenn du die exe startest), mit F5 wird noch ein Debugger drangehängt.

Man sollte vielleicht aufpassen, die Begriffe nicht durcheinander zu schmeißen. Ob man jetzt die Debug oder Release Konfiguration startet (oder eine selbst gebaute, die beiden sind ja nur Standardvorschläge die man nach belieben ändern/erweitern/löschen kann), hat erstmal nichts damit zu tun, ob ein Debugger läuft, oder nicht. Man kann auch die kompilierte Datei der Releaseversion debuggen, nur dann kann dir der Debugger evtl. nicht alle Informationen liefern.
Lieber dumm fragen, als dumm bleiben!

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

17

18.10.2010, 12:48

Öhm, tut mir Leid. War sehr unglücklich formuliert ^^"
Ausserdem hab ich das anders in Erinnerung... Ich war fest davon überzeugt dass die Meldung (Press any key) nur mit Debugger kam. Hat jemand noch vs 2003 um das zu testen?

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

18

18.10.2010, 13:31

Kann sein, manche Entwicklungsumgebungen bauen um die Commandozeilenaufrufe von Konsolenprogrammen noch System("Pause") ein. Aber hier ging es ja nicht um das, was die Entwicklungsumgebung macht, sondern warum cin.get(); nicht wie gewünscht funktioniert hat. Also führt das imho an der Fragestellung vorbei. ^^

19

18.10.2010, 13:51

Nun gut, das Thema hättest du dir selbst beantworten können, hättest du mal die Suchfunktion genutzt.

Warum std::system (<cstdlib>) keine Lösung ist, findet ihr, wenn ihr mal "c++ system bad" odg. bei der Suchmachine eurer Wahl eingebt.
std::cin.sync() sagt der C++-Std. nirgendwo zu, dass die Zeichen verworfen werden sollen die noch drin stehen.
-> Portable und sichere Lösung:

C-/C++-Quelltext

1
2
3
4
#include <iostream>
#include <limits>

std::istream& clear_stream(std::istream& in) { in.clear(); return in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'), in; }

Damit werden alle Fehlerstati gelöscht und alle Zeichen verworfen.

C-/C++-Quelltext

1
2
3
4
int main()
{
    clear_stream(in).get(); 
}
sollte also reichen, um dein Fenster aufzuhalten ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige