Tôi đang làm việc thông qua trình Bjarne Stroustrup của - Nguyên tắc và Thực hành Sử dụng C++ và đến ví dụ sau:cin trong C++ cố gắng gán giá trị chuỗi cho một biến 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;
}
Nếu bạn chạy chương trình và đầu vào Carlos 22, nó sẽ chính xác sản lượng Hello, Carlos (age 22)
. Tuy nhiên, nếu bạn đặt trong 22 Carlos, ông nói rằng đầu ra phải là Hello, 22 (age -1)
vì kể từ khi "Carlos không phải là một số nguyên ... nó sẽ không được đọc". Tuy nhiên, khi tôi chạy nó, nó trả về Hello, 22 (age 0)
mà có vẻ như nó gán một giá trị rác cho nó. Tôi tò mò là tại sao điều này xảy ra, vì cuốn sách ngụ ý rằng trừ khi bạn nhập một số nguyên, nó sẽ không cố gắng gán bất cứ điều gì cho biến số age
. Tôi đã chạy mã với các điểm ngắt và xác nhận giá trị của age
thay đổi từ -1 đến 0 sau khi nhập đầu vào không phải số nguyên.
Tôi có làm gì sai không? Hay đây là một sự kỳ quặc do thực tế tôi đang xây dựng nó thông qua Xcode và bất cứ trình biên dịch nào đi kèm với điều đó?
Đây là 'hành vi chưa xác định' mà bạn đang nhận được. Trong trường hợp như vậy, đầu ra có thể là bất cứ điều gì –
C++ 11 trở đi sẽ đặt các loại vô hướng thành 0 khi trích xuất không thành công, trước khi C++ 11 giá trị không được chạm. – user657267
@ user657267, Ah, cảm ơn vì điều đó. Tôi đã nhầm lẫn vì nó là phiên bản cập nhật của cuốn sách cho C++ 11, nhưng sau khi đọc bình luận của bạn, tôi nhìn lên errata và chắc chắn đủ, có một lưu ý về điều này. Cảm ơn! – Dan