Sto lavorando attraverso la programmazione di Bjarne Stroustrup - Principles and Practice con C++ ed è venuto al seguente esempio:cin in C++ cercando di assegnare valori stringa a una variabile int?
#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;
}
Se si esegue il programma e l'input Carlos 22, sarà trasmesso correttamente Hello, Carlos (age 22)
. Tuttavia, se inserisci Carlos 22, dice che l'output dovrebbe essere Hello, 22 (age -1)
perché "Carlos non è un numero intero ... non verrà letto". Tuttavia, quando lo eseguo, restituisce Hello, 22 (age 0)
che sembra assegnare un valore di spazzatura ad esso. Sono curioso del motivo per cui ciò sta accadendo, in quanto il libro implica che, a meno di non inserire un numero intero, non tenterà di assegnare nulla alla variabile age
. Ho eseguito il codice con i punti di interruzione e confermato il valore di age
modifiche da -1 a 0 una volta inserito l'input non intero.
Sto facendo qualcosa di sbagliato? O è una stranezza dovuta al fatto che lo sto costruendo attraverso Xcode e qualunque compilatore viene incluso in questo?
Questo è un "comportamento non definito" che si sta ottenendo. In tali casi l'output può essere qualsiasi cosa –
C++ 11 in poi imposterà i tipi scalari su 0 quando l'estrazione non riesce, prima di C++ 11 il valore non è stato toccato. – user657267
@ user657267, Ah, grazie per quello. Ero confuso perché era l'edizione aggiornata del libro per C++ 11, ma dopo aver letto il tuo commento, ho guardato l'errata e abbastanza sicuro, c'era una nota su questo. Grazie! – Dan