Как вы говорите, std::istream::get
получает знак от входного потока. Например, если вы вводите цифру 1
в качестве ввода, она возвращает код ASCII для символа '1'
, который является 49
десятичным (в системах, использующих ASCII, что почти все).
При использовании оператора ввода >>
эта функция считывает и анализирует ввод в правильный формат. Поэтому, если вы используете >>
с переменной double
и введите 1
, вы получите значение 1.0
в переменной.
Проблема у вас есть то, что, когда входной оператор >>
не может правильно разобрать вход, как при вводе буквы вместо цифр, то оператор ввода будет прервана и не установить переменную, то есть вы напечатать неинициализированную переменную, которая равна неопределенное поведение. Обратите внимание, что это поведение изменилось в C++ 11 (см., Например, this old answer of mine).
Вы должны помнить, что объект потока можно использовать как условие и что функция оператора ввода возвращает данный поток. Таким образом, вы можете сделать, например.
if (std::cin >> x)
std::cout << x << '\n';
else
std::cout << "Error in input\n";
+1, с незначительным nitpick: '1.0' представляется точно в' double' (или 'float', если на то пошло). – Angew