Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
1

Проверка ошибок при вводе (cin)

21.01.2016, 15:41. Показов 5611. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, у меня тут при вводе фигня какая-то происходит.
Вот код:
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
int width;
while (true) {
    cin >> width;
    if (cin.good())
        break;
    else if (cin.fail()) {
        cout << "Incorrect entry. Try again: ";
        cin.clear();
        cin.ignore();
        continue;
    }
}
Он делает свою работу, конечно, но при вводе нескольких символов (которые не цифры), он выводит "Incorrect entry. Try again: " столько раз, сколько было введено символов. Почему? И как это пофиксить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2016, 15:41
Ответы с готовыми решениями:

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод. Не пойму предназначение cin.get()...

Пробел при вводе данных c применением cin
Допустим имеется следующая запись cin&gt;&gt;n1&gt;&gt;n2&gt;&gt;n3; Спрашивается как оператор разграничивает вводимые данные? Согласитесь, ввести 12,...

Поведение cin при вводе некорректного типа данных
Был создан цикл: while (err) //bool err = true { try { cin &gt;&gt; arrsz // int arrsz if (!isdigit(arrsz)) ...

5
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
21.01.2016, 15:48 2
Лучший ответ Сообщение было отмечено meJevin как решение

Решение

Цитата Сообщение от meJevin Посмотреть сообщение
cin.ignore();
Замени на:
C++ Скопировано
1
while (cin.get() != '\n');
1
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
21.01.2016, 15:51  [ТС] 3
Цитата Сообщение от nord_v Посмотреть сообщение
Замени на:
Неа
Миниатюры
Проверка ошибок при вводе (cin)  
0
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
21.01.2016, 15:57  [ТС] 4
Цитата Сообщение от nord_v Посмотреть сообщение
Замени на:
А хотя нет) Все сработало, спасибо!!

Добавлено через 4 минуты
Цитата Сообщение от nord_v Посмотреть сообщение
Замени на:
А почему до перехода на новую линию? У меня же в cout << "Incorrect entry. Try again: "; нету endl или \n.
Объясни пожалуйста, если не трудно, а то вдруг еще на такую лабуду наткнусь.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
21.01.2016, 16:04 5
Цитата Сообщение от meJevin Посмотреть сообщение
А почему до перехода на новую линию? У меня же в cout << "Incorrect entry. Try again: "; нету endl или \n.
Цитата Сообщение от meJevin Посмотреть сообщение
но при вводе нескольких символов (которые не цифры)
Когда устанавливается флаг ошибки, не цифры остаются в очереди ввода, и их оттуда нужно удалить (удалить всё до '\n', и '\n тоже), что и делает конструкция while (cin.get() != '\n')(ignore() пропускает только один символ). Иначе, при каждой итерации чтения, cin >> будет сталкиваться с ними, и заходить в else.
1
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
21.01.2016, 16:06  [ТС] 6
Цитата Сообщение от nord_v Посмотреть сообщение
будет сталкиваться с ними, и заходить в else.
Спасибо еще раз)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2016, 16:06
Помогаю со студенческими работами здесь

Зацикливание приложения при вводе в cin данных с пробелом
Есть такой код ( курсовой проект, не суть). Проблема такова: при вводе в переменную vak значения с пробелом приложение работает...

При вводе данных программа пропускает операции cin
Описать структуру с именем note, содержащую следующие поля:  фамилия, имя;  номер телефона;  дата рождения (массив из трех...

Некорректная работа cin.fail() при вводе смешанных данных
Дарова, у меня есть код, где присутствует проверка на ввод неправильных данных(в моем случае всяких букв), но работает она не так, как мне...

При вводе русских символов через cin в string превращаются в крокозябры
string name = &quot;&quot;; cin &gt;&gt; Name; &quot;Иван&quot; Выводит &quot;€ў**&quot; Что делать? Такое только при вводе. Заранее инициализированные отображаются...

при некорректном вводе cin далее уже не принимает ввод, не понимаю почему?
В условии if (cin &gt;&gt; A &gt;&gt; B) {...} при некорректном вводе cin далее уже не принимает ввод, не понимаю почему. Вот строчки int main() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
Разработка кроссплатформен­­­­ного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер