0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 3
|
|
1 | |
Корректный ввод с cin02.06.2013, 18:17. Показов 12838. Ответов 18
Метки нет (Все метки)
Пусть в программе есть оператор cin >> n, где n типа int, а пользователь вводит набор символов
Как отследить это, не выдавая ошибку, и не зацикливаясь?
0
|
02.06.2013, 18:17 | |
Ответы с готовыми решениями:
18
Ввод через пробел. Как остановить ввод. while(cin >> input) Как работает cin.peek, cin,get, cin.ignore, cin.clear? Проверка на корректный ввод числа Как организовать корректный ввод? |
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
|
||||||
02.06.2013, 18:35 | 3 | |||||
0
|
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 3
|
|
02.06.2013, 18:40 [ТС] | 4 |
Есть программа, в которой считываются целые числа через cin.
Необходимо после каждого считывания проверять, было ли считано число или буква В cin должны быть какие-то флаги, типа cin.fail(), который вроде-как показывает подобную ошибку Но я хочу узнать, так ли это, а также как пропустить введенные буквы (типа cin.ignore(), но я не уверена). Не подскажете ли? Добавлено через 4 минуты Т.е. нужно проверить, было ли введено число (я так поняла, cin.fail()). А также пропустить нечисловые символы И можно ли привести кусок программы, если не тяжело?)
0
|
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
|
||||||
02.06.2013, 18:41 | 5 | |||||
0
|
Неэпический
|
||||||
02.06.2013, 18:42 | 6 | |||||
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
02.06.2013, 18:45 | 7 | |||||
Можно так:
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||
02.06.2013, 18:49 | 8 | |||||
не отпустит пока не будет введено корректное значение
Croessmah, если попытаться ввести не число, то зацикливается
1
|
Croessmah
|
02.06.2013, 18:51
#9
|
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
02.06.2013, 19:11 | 10 |
0
|
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 3
|
|
02.06.2013, 19:15 [ТС] | 11 |
Oliver, нужно как раз, чтобы не зацикливалось
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||
02.06.2013, 19:33 | 12 | |||||
julia111, нужно считать число и если считывание не удалось, то вывести сообщение об ошибке?
Тогда можно так:
0
|
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
|
|
02.06.2013, 20:04 | 13 |
Объясните на примере, что должна делать программа в каких ситуациях? КАК МОЖНО больше конкретики, реальный пример в студию
Добавлено через 4 минуты А если пользователь вводит числа через пробел, то они исчезают? Не лучше ли сделать "ручной" цикл типа этого while (curChar = in.get(), isspace(curChar));
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
02.06.2013, 20:16 | 14 |
За один вызов функции - один ввод числа. Если написать 55 56 (через пробел), то функция вернёт 55.
Всё, что написано в теле функции, позволяет сделать защиту от дураков (\n, буквы при вводе числа и тд).
0
|
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
|
|
02.06.2013, 20:18 | 15 |
Olivеr, это ясно, а что будет при последующих вызовах функции? Как она будет вести себя на "aaaa 666"?
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
02.06.2013, 20:20 | 16 |
"aaaa 666" - считает aaaa, это не число, значит ошибка и начинаем сначала.
0
|
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
|
|
02.06.2013, 20:25 | 17 |
Olivеr, но ведь пропадает 666. Хотя формулировка вопроса странная. То она пишет, что вводится число, то числа
Добавлено через 2 минуты Ещё в консоли линукса никто не запрещает вводить многострочные строки через буфер обмена... Защита будет работать не совсем до конца тогда
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
02.06.2013, 20:27 | 18 |
Buckstabue, да, этот код подойдет в том случае, если нужно заставить пользователя ввести данные.
На месте автора я бы считал данные в строку string и потом прокручивал ее с помощью stringstream.
0
|
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
|
|
02.06.2013, 20:29 | 19 |
Olivеr, согласен про stringstream, именно это я хотел предложить в случае, если буду уверен, что правильно понял условие задачи.
Жаль, в стандартной библиотеке нет функции для корректного сброса буффера ввода
0
|
02.06.2013, 20:29 | |
02.06.2013, 20:29 | |
Помогаю со студенческими работами здесь
19
Проверка на корректный ввод числа Проверка на корректный ввод символов Корректный ввод структуры и ее обработка Корректный ввод данных, goodbit,зацикливание Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |