[C++] Cin übermitteln

Udem

Mitglied
Halli Hallo liebe Gemeinschaft,
ich lerne seit einigen Tagen C++ und habe mir schon ein tolles Buch darüber gekauft, bin jetzt aber an einer Stelle gestolpert, wo ich nicht weiter komme.

Im Buch steht folgender Code:
PHP:
#include <iostream>
using namespace std;

int main() {
cout << "\nBitte den Wert von 'w' eingeben: ";
int w;
cin >> w;
cout << "Der Wert von 'w' mal 2 ist " << w*2;
return 0;
}
Wirkung des Codes: Wenn ich nach Bitte den Wert von 'w' eingeben eine Zahl eingebe, sollte er als nächsten Satz den unteren anzeigen und w*2 rechnen. Wenn ich jedoch eine Zahl eingebe und Enter klicke, dann schließt sich das CMD.

Kann mir jemand erklären wieso? Muss ich ein cin.get(); einbauen?
 
Hi,
die Sache ist, dass dein Programm sobald es "return 0;" erreicht zuende ist. Daher schließt sich die Konsole auch sofort.
Die Möglichkeit für dich die am besten funktioniert ist folgende. Schreib einfach vor dein return

C++:
getchar();

So wartet das Programm nach der Ausführung noch eine beliebige Taste.

Gruß
 
Hi,
die Sache ist, dass dein Programm sobald es "return 0;" erreicht zuende ist. Daher schließt sich die Konsole auch sofort.
Die Möglichkeit für dich die am besten funktioniert ist folgende. Schreib einfach vor dein return

C++:
getchar();

So wartet das Programm nach der Ausführung noch eine beliebige Taste.
Das ist nicht ganz richtig. Da das Zeilenendezeichen noch im Eingabepuffer ist wird das nichts ändern. Und in C++ sollte man lieber die Streams verwenden:
C++:
cin.sync();
cin.get();
Gruß
 
Hey,
wenn ich
PHP:
#include <iostream>
using namespace std;

int main() {
cout << "\nBitte den Wert von 'w' eingeben: ";
int w;
cin >> w;
cin.get();
cout << "Der Wert von 'w' mal 2 ist " << w*2;
cin.get();
return 0;
}
mache geht es perfekt, jedoch verstehe ich nun nicht wieso es erst mit 2 cin.get(); s geht. Kann mir das jemand erklären?
 
Du gibst 24 ein und drückst die Entertaste. In der Eingabewarteschlange sind jetzt das Zeichen '2', das Zeichn '4' und das Zeichen '\n'. Dann holst du eine Zahl aus der Warteschlange, das wäre dann 24. Daher werden '2' und '4' aus der Eingabewarteschlange entfernt. Aber das '\n' der Entertaste ist immernoch am Warten. Dann rufst du std::cin.get() auf. Das wiederum holt ein Zeichen aus der Warteschlange oder wartet bis eines kommt. Da ja das '\n' noch drin ist wird dein ersters Aufruf dieses '\n' zurückgeben und nicht warten. Erst dann ist der Eingabestrom leer und ein erneuter Aufruf von std::cin.get() führt so einem blockierenden Verhalten bis zur Eingabe.

Wie dir bereits deepthroat gezeigt hat solltest du den Eingabestrom zuerst mit std::cin.sync() von allfälligen Relikten befreien und dann std::cin.get() aufrufen.
 
Zurück