«4.0» является допустимым представлением целого числа, а именно цифрового символа «4», за которым следуют некоторые другие вещи.Когда вы читаете этот текст в int
, вы получаете правильное значение, а остальная часть ввода остается позади.
Если вы хотите интерпретировать всю строку как числовое значение, и обрабатывать результат какцелое число, когда оно не имеет дробной части, вы должны прочитать весь ввод как значение с плавающей запятой.Если результатом является целочисленное значение, то у вас есть целое число;в противном случае вы этого не сделаете.
double d;
std::cin >> d;
if (d == (int)d)
std::cout << "got an integer value.\n";
else
std::cout << "didn't get an integer value.\n";