Проверка на не числовой ввод. Вот хочу знать, как она работает: что здесь за что отвечает и что делает
while (!(cin >> a>>b) || (cin.peek() != '\n'))
{
cin.clear();
while (cin.get() != '\n');
cout << "Ошибка!" << endl << "Введите число!" << endl;
}
C/C++
Объясните максимально простым языком, как работает данный код C++
Пользователь может ввести в поток последовательность цифр, пробел или клавишу Tab, нажать клавишу Enter, букву, символ пунктуации. Цикл while выполняется до тех пор пока его условие возвращает true. Выражение !(cin >> a>>b) возвращает false, если данные в поток введены корректно и наоборот. Объект std::cin игнорирует пробельные символы, к которым он относит собственно пробел, символ табуляции и символ перевода на другую строку. Если вводить эти символы, то std::cin откажется их принимать и будет возвращать самого себя до тех пор, пока не увидит код больше 32 или меньше нуля. Если ввести некорректные данные, то первая часть условия вернёт true, и проверка второй части условия теряет смысл. Если данные в обе переменные введены корректно, но пользователь ввёл после них что-то ещё и только после этого нажал на клавишу Enter, то в этом случае в потоке останется мусор, который приведёт к неопределённому поведению программы в дальнейшем, в том месте, где потребуется вводить данные в стандартный поток. Вторая часть условия возвращает true в случае, если функция peek() увидит в потоке символ отличный от символа конца строки '\n'.
Некорректно введённые данные приводят к повреждению стандартного потока ввода. Функция clear() восстанавливает его.
Конструкция while (cin.get() != '\n'); читает восстановленный поток до символа конца строки.
Пользователю сообщается, что он при вводе допустил ошибку и ему предлагается повторить ввод.
Цель кода: сделать ввод данных безопасным, предусматривая все возможные ошибки ввода и своевременно их устранять.
Некорректно введённые данные приводят к повреждению стандартного потока ввода. Функция clear() восстанавливает его.
Конструкция while (cin.get() != '\n'); читает восстановленный поток до символа конца строки.
Пользователю сообщается, что он при вводе допустил ошибку и ему предлагается повторить ввод.
Цель кода: сделать ввод данных безопасным, предусматривая все возможные ошибки ввода и своевременно их устранять.
Каких типов a и b ?
Hasanbay Dadabaev
double
Похожие вопросы
- В чем ошибка простого кода C++?
- Ошибки в коде c++
- Помогите с кодом C++
- Что не так с кодом C++ ?
- Написать массив на C(не C++) пожалуйста!!! простым языком с пояснениями
- Какой язык программирования работает быстрее и в каких случаях (Python и C++)?
- Помогите пожалуйста написать код.(C++)
- Помогите, пожалуйста, исправить ошибку в коде (C++).
- Объясните в кратце как выполнять код C++
- Написать код C++