Whiteha
Программист
|
||||||
#1 | ||||||
Универсальная функция получения числа через cin - C++30.10.2013, 00:51. Просмотров 1055. Ответов 31
Метки нет Все метки)
(
Пытался написать универсальную функцию для гарантированного получения числа нужного типа, примерно так:
В частности при вызове с аргументом шаблона T = long double и рандовном набивание символов num присваивается 0, а clear то ли не отрабатывает как надо, то ли еще что... в общем все работает не так. Светлые умы, помогите довести до ума кто знает как Добавлено через 18 минут Кстати также некорректно обрабатывает ввод типа 2,,3, при нем двойка считывается как корректное значение, но поток не очищается от мусора, как я понимаю(а было бы не плохо все это непотребство отбраковывать и требовать повторный ввод).
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
30.10.2013, 00:51 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Универсальная функция получения числа через cin (C++):
31
Заполнить массив цифрами числа, считанного через cin - C++ Универсальная функция - C++ какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() - C++
Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync - C++ |
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
30.10.2013, 02:59 | #17 |
Вы покажите, что вводите, и код, который используете. Я же на скрине показываю, что ввожу, и код показываю, который использую.
Добавлено через 1 минуту У вас Linux?
0
|
MrGluck
Модератор
![]() ![]() 7728 / 4764 / 732
Регистрация: 29.11.2010
Сообщений: 13,020
|
|
30.10.2013, 03:02 | #18 |
У меня в CB с мингв тоже вечный цикл. После добавления хедеров cstdlib, limits и ввода abcd - infinity loop как на скрине выше.
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
30.10.2013, 03:13 | #21 | |||||
Вот этот будет работать, mingw почему-то не нравится cin.ignore(cin.rdbuf()->in_avail()) :
Потом нужно будет разобраться, что ему не нравится. Добавлено через 1 минуту MrGluck, в Linux, кстати, sync() не работает. По-моему, у вас, один из вариантов, использует.
1
|
MrGluck
Модератор
![]() ![]() 7728 / 4764 / 732
Регистрация: 29.11.2010
Сообщений: 13,020
|
||||||
30.10.2013, 03:18 | #22 | |||||
Добавлено через 3 минуты
1
|
Whiteha
Программист
|
|
30.10.2013, 03:22 [ТС] | #23 |
Так, подтверждаю работоспособность последнего выложенного кода на своей машине, большое спасибо.
Никогда не дружил с "заскоками" iostream'ов, завтра на свежую голову поизучаю повнимательнее, что где было не так.
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
30.10.2013, 03:29 | #24 | |||||
Вот ещё, добавил предварительнное восстановление потока, если ломается до вызова функции:
MrGluck, если по-русски, почему?
0
|
MrGluck
Модератор
![]() ![]() 7728 / 4764 / 732
Регистрация: 29.11.2010
Сообщений: 13,020
|
|
30.10.2013, 03:30 | #25 |
0
|
MrGluck
Модератор
![]() ![]() 7728 / 4764 / 732
Регистрация: 29.11.2010
Сообщений: 13,020
|
|
30.10.2013, 03:31 | #26 |
del
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
30.10.2013, 03:50 | #27 |
0
|
MrGluck
Модератор
![]() ![]() 7728 / 4764 / 732
Регистрация: 29.11.2010
Сообщений: 13,020
|
|
30.10.2013, 03:59 | #28 |
Оно кидает исключение
В описании http://www.cplusplus.com/reference/streambuf/streambuf/in_avail/ Исключение выдает basic_ios::clear.
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
30.10.2013, 04:07 | #29 |
0
|
MrGluck
Модератор
![]() ![]() 7728 / 4764 / 732
Регистрация: 29.11.2010
Сообщений: 13,020
|
|
30.10.2013, 04:14 | #30 |
В новых компиляторах кидает исключение, из-за чего поток остается в "рабочем состоянии". В старых это не делает.
Добавлено через 5 минут Это лишь предположение.
0
|
30.10.2013, 04:14 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
30.10.2013, 04:14 |
Привет! Вот еще темы с ответами:
30
Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear() - C++ Функция getline(cin,.) - C++
Функция cin.getline() - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |