Ich arbeite durch Bjarne Stroustrup Programmierung - Principles and Practice C++ und kam zu folgendem Beispiel:cin in C++ versucht String-Werte einer int-Variablen zuzuordnen?
#include "std_lib_facilities.h"
int main() {
/* Name and Age input */
cout << "Please enter your first name and age\n";
string first_name = "???";
int age = -1.0;
cin >> first_name >> age;
cout << "Hello," << first_name << "(age " << (age * 12) << " months)\n";
return 0;
}
Wenn Sie das Programm und Eingabe Carlos laufen 22, es wird korrekt ausgegeben Hello, Carlos (age 22)
. Wenn Sie jedoch 22 Carlos eingeben, sagt er, dass die Ausgabe Hello, 22 (age -1)
sein sollte, da "Carlos keine ganze Zahl ist ... wird nicht gelesen". Wenn ich es jedoch ausführe, gibt es Hello, 22 (age 0)
zurück, was scheint, als ob es ihm einen Müllwert zuweist. Ich bin neugierig, warum dies geschieht, wie das Buch impliziert, dass es nicht versucht, der age
Variable nichts zuzuordnen, wenn Sie eine Ganzzahl eingeben. Ich habe den Code mit Haltepunkten ausgeführt und bestätigt, dass der Wert age
von -1 auf 0 wechselt, nachdem der nicht ganzzahlige Eingang eingegeben wurde.
Mache ich etwas falsch? Oder ist das eine Kuriosität aufgrund der Tatsache, dass ich es über Xcode erstelle und welcher Compiler dabei ist?
Dies ist ein "undefined Verhalten", das Sie bekommen. In solchen Fällen kann die Ausgabe alles sein –
C++ 11 und setzt Skalartypen auf 0, wenn die Extraktion fehlschlägt, vor C++ 11 wurde der Wert unberührt gelassen. – user657267
@ user657267, Ah, danke dafür. Ich war verwirrt, weil es die aktualisierte Ausgabe des Buchs für C++ 11 war, aber nachdem ich deinen Kommentar gelesen hatte, habe ich die Errata nachgeschlagen und es war eine Notiz darüber. Vielen Dank! – Dan