Câu trả lời ngắn: Bạn không có thể.
Câu trả lời dài: Bạn không thể. C++ là một ngôn ngữ được gõ tĩnh, có nghĩa là bạn phải định nghĩa kiểu tại thời gian biên dịch. Python được nhập động, vì vậy loại đối tượng có thể thay đổi từ dòng này sang dòng khác.
Nếu bạn muốn nhận một số đầu vào từ người dùng, bạn chỉ có thể sử dụng chuỗi.
Ví dụ, nếu bạn muốn nhận được số nguyên đầu vào từ người sử dụng:
int n;
std::cin >> n;
nổi đầu vào:
float x;
std::cin >> x;
Và vân vân. Do lưu ý trong hai trường hợp, nếu người dùng nhập vào một cái gì đó khác với một số nguyên hoặc phao, bạn sẽ phải kiểm tra cờ của std :: cin để xem nếu có một lỗi.
Nhưng bạn cần phải thông báo cho người dùng "Nhập số nguyên ngay bây giờ" hoặc "Nhập float ngay bây giờ". Bạn không thể chấp nhận một số loại tùy ý. Thay vào đó, hãy thiết kế mã của bạn để bạn có các đường dẫn mã thay thế cho đầu vào số nguyên hoặc dấu phẩy động. Hoặc buộc một hay cái kia, và in ra một lỗi khi chúng đưa ra loại đầu vào sai.
Không viết mã của bạn như bạn đang sử dụng Python. Mã Python thành ngữ không phải là mã C++ thành ngữ và cách bạn hoàn thành mọi thứ sẽ không giống nhau.
Trong C++ cách để có được đầu vào tùy ý sẽ trông như thế:
std::string input;
std::cin >> input;
if (IsInteger(input))
{
// do stuff with integer
}
else if (IsFloat(input))
{
// do stuff with float
}
else
{
std::cout << "Bad Input!" << std::endl;
}
Edit: Theo MSalters chỉ ra trong một chú thích, Bạn thực sự có thể sử dụng boost::lexical_cast<T>(expr)
để đúc một chuỗi đại diện cho một số loại T (Trường hợp T thường là một cái gì đó như int, float, double, vv). Lưu ý, có thể bạn vẫn phải thực hiện một số kiểm tra để xem liệu expr
có thực sự là một số nguyên, float hay không.
Nguồn
2011-07-18 03:28:07
Tôi nghĩ rằng những gì bạn có thể cần chỉ là một phao hoặc một đôi. Họ có thể giữ số nguyên cũng như số phân số. –