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

1

08.12.2012, 22:26

Anfängerproblem mit cin.get()

Tach erstmal.

Vor ein paar Tagen ging mir mal der Gedanke durch den Kopf, hey, Spiele programmieren ist doch bestimmt lustig. Also gleich mal ein Buch gekauft und drauf losgelegt. Jetzt gibt es natürlich ein paar Sachen die ich nicht immer gleich kapiere. Wäre nett wenn ihr mir da ein bisschen helfen könntet.

Also. Ich hab einen Euro Dollar Umrechner nach einem Video auf Youtube programmiert. Nachdem der Benutzer die Variable Euro eingegeben hat sollte der Computer diese in Dollar umrechnen und ausgeben. Zum Schluss sollte der Befehl "cin.get()" verhindern das das Programm gleich geschlossen wird. Die Berechnung wird korrekt ausgeführt, aber nachdem die Eingabe von Euro mit Enter bestätigt wird blitzt das Ergebnis nur kurz auf und das Programm schließt sich. Um das zu beheben muss man nochmal den Befehl cin.get() nach dem Befehl zur Eingabe von Euro setzen. Warum ?


Hier der Quellcode:



#include <iostream>

using namespace std;

int main ()

{

float fEuro, fDollar, fFaktor = 1.2928;

cout << "Euro Dollar Umrechner \n"
<< "Bitte geben sie die Zahl in Euro ein die sie umgerechnet haben möchten: ";

cin >> fEuro;

cin.get();

fDollar = fEuro * fFaktor;

cout << fEuro <<" Euro entspricht " << fDollar << " Dollar";

cin.get();

return 0;
}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

08.12.2012, 22:33

Das ist eine der kleinen Unschönheiten, die sich aus der Stream-Konsequenz ergibt. Wenn Du eine Zahl eingibst und Enter drückst, gibst Du eben eine Zahl und Enter ein, nicht nur eine Zahl. Das Enter würde von cin.get(); gelesen werden und das Programm wäre beendet.
(mal etwas Laienhaft ausgedrückt)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

08.12.2012, 22:52

Wenn du unbedingt cin.get() verwenden willst, muss du es zwei mal hintereinander schreiben ;)
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

4

08.12.2012, 22:57

Also ist das Enter, obwohl ich es auch ohne den Befehl "cin.get()" eingeben hätte müssen, nach der Eingabe noch vorhanden und wird von "cin.get()" gelesen, oder ?

Gut, dann weiß ich das in Zukunft. Aber warum das so ist würde ich eigentlich auch gern verstehen. :hmm:

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

5

08.12.2012, 23:39

cin.get() liest das letzte Zeichen aus der vorigen Zeile aus. Und das ist in dem Fall das Enter.
Normalerweise würde Enter drücken bedeuten, dass sich das Programm an der Stelle beendet, aber da du mit cin.get() das Enter einliest, verhinderst du das Auslösen der besonderen Bedeutung dieses Zeichens, nämlich das Beenden des Programms.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

09.12.2012, 08:58

Also ist das Enter, obwohl ich es auch ohne den Befehl "cin.get()" eingeben hätte müssen, nach der Eingabe noch vorhanden und wird von "cin.get()" gelesen, oder ?

Gut, dann weiß ich das in Zukunft. Aber warum das so ist würde ich eigentlich auch gern verstehen. :hmm:

cin.get() gibt nichts ein. Du gibst etwas ein, wenn Du die Zahl in der Konsole tippst und Enter drückst. Im Stream ist dann die Zahl *und* der Enter-Code. cin liest die Zahl, das Enter ist noch im Stream. cin.get() liest es dann raus.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

09.12.2012, 16:59

Auch auf die Gefahr hin, jetzt verprügelt zu werden, aber ich bin der Meinung das ein

C-/C++-Quelltext

1
system("pause");

für genau solche Testprogrämmchen gar keine schlechte Idee ist...
Lieber dumm fragen, als dumm bleiben!

8

09.12.2012, 17:02

@Jonathan_Klein: Das läuft aber nur auf Windows.

Entweder cin.get() oder getch().

9

09.12.2012, 18:00

Natürlich und es hat auch noch tausend andere Nachteile, aber die sind hier alle nicht relevant würde ich behaupten. Und im Gegensatz zu cin.get() hat es bei mir noch nie Probleme gemacht.
Lieber dumm fragen, als dumm bleiben!

10

09.12.2012, 18:44

Habs jetzt kapiert. Danke für die Antworten. :thumbup:

Werbeanzeige