Я хочу проверить ввод с клавиатуры double
:
- , если ввод -
double
, программа должна продолжаться нормально. - если ввод не является
double
(включая Ctrl+Z
), программа должна очистить состояние потока и игнорировать весь оставшийся ввод до следующего \n
, чтобы получить новый ввод.
Итак, я написал этот код:
#include "std_lib_facilities.h"
int main()
{
double val{};
cout << "Please enter a 'double' value:\n";
while (!(cin>>val))
{
cout << "ERROR: That is not a valid entry. Please try again\n";
cin.clear();
cin.ignore(INT_MAX, '\n');
}
cout << val << "\n\n";
keep_window_open();
return 0;
}
И у меня есть 2 вопроса: (Я хочу решить эту проблему, используя только cin и cout, пожалуйста.)
Когда пользователь вводит Ctrl + Z и нажимает Enter (что совпадает с '\n'
), cin.ignore(INT_MAX, '\n');
продолжает ждать ввода '\n'
. Почему это происходит, если после Ctrl + Z уже стоит Enter (или \n
)?
Этот код не распространяется на такие записи, как: 98ssssssssss. Примет значение 98, и sssssssss останется в потоке. Как улучшить код, чтобы он распознал его как неправильную запись?