Я новичок в C ++. Я экспериментировал с функционированием и ограничением cin
.
Интересно, как cin
будет принимать входные данные, если пользователь дает неправильные типы данных. Поэтому я проверил переполнение стека и получил этот ответ :
Когда вы читаете целое число и вводите 1,5, оно видит целое число 1 и останавливается в период, так как это не является частью целого числа. «.5» все еще на входе. Это причина того, что вы получаете только целую часть, а также причина, по которой он, похоже, не ожидает ввода во второй раз.
Чтобы обойти это, вы могли бы читать число вместо целое число, поэтому он читает все значение, или вы можете проверить, осталось ли что-нибудь еще в строке после чтения целого числа.
Так что я поэкспериментировал с ним.
#include <iostream>
int main()
{
std::cout << "Enter 4 numbers: " <<
std::endl;
int v1 = 0, v3 = 0;
float v2 = 0, v4 = 0;
std::cin >> v1 >> v2 >> v3 >> v4;
std::cout << "-> " << v1 << " " << v2 << " "
<< v3 << " " << v4 << std::endl;
return 0;
}
Enter 4 numbers:
3.14 2.718
-> 3 0.14 2 0.718
Работает как положено. Но когда я попытался
#include <iostream>
int main()
{
std::cout << "Enter 3 numbers: " <<
std::endl;
int v1 = 0, v2 = 0;
float v3 = 0;
std::cin >> v1 >> v2 >> v3;
std::cout << "-> " << v1 << " " << v2 << " "
<< v3 << std::endl;
return 0;
}
Enter 3 numbers:
3.14
-> 3 0 0
, я ожидал 3 0 0.14
, потому что 3
будет v1
, так как int
, 0.14
будет в буфере, поэтому, когда встретится 2 >>
он назначит 0
на v2
, а третий >>
назначит 0.14
на v3
, так как v3
- это тип float
.
Пожалуйста, объясните идею, как это работает таким образом.
Я использовал компилятор G ++ mingw 8.2.0 на моем Lenovo Ideapad S340