Форум программистов, компьютерный форум CyberForum.ru

ошибка потокового ввода cin - C++

Восстановить пароль Регистрация
 
Anatoliy Coder
 Аватар для Anatoliy Coder
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 75
03.04.2013, 21:12     ошибка потокового ввода cin #1
Цель: сделать проверку ввода с клавиатуры числа unsigned short типа.
Проблема: при вводе значения кпримеру: 2A , то переходит к следующему считыванию значения и в него пытается вписать что-то.
Код:
C++
1
2
3
4
5
6
7
8
9
10
unsigned short UserId; // Идентификатор пользователя
cout << " Введите индентификатор пользователя (0;255): "; // Интервал исходя из 2^8, где 8-биты
cin >> UserId;
while(cin.fail() || !(UserId >= 0 && UserId <= 255) )
{
     cin.clear();
     cin.ignore(255, '\n');
     cout << " Некорректное значение." << endl << " Введите индентификатор пользователя (0;255): ";
     cin >> UserId;
}
Вопрос: как решить данную проблему?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 21:12     ошибка потокового ввода cin
Посмотрите здесь:

Функции потокового ввода/вывода C++
C++ Библиотека потокового ввода/вывода
Перегрузка потокового ввода/вывода C++
C++ функция ввода вместо cin
C++ cin остаток после ввода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
03.04.2013, 21:25     ошибка потокового ввода cin #2
http://www.cplusplus.com/reference/locale/isdigit/
http://stackoverflow.com/questions/8...ns-only-digits
Считывай строку и проверяй на корректность ввода
Anatoliy Coder
 Аватар для Anatoliy Coder
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 75
03.04.2013, 21:30  [ТС]     ошибка потокового ввода cin #3
BuGi, спасибо, но еще одна важная вещь, мне нужно не только проверить, но и еще сделать так, чтобы cin дальше никакой фигни в следующий переменные не пихала.
Все спасибо проблему решил так:
C++
1
while(cin.fail() || !(UserId >= 0 && UserId <= 255) || !isdigit(UserId))
Просто добавил в проверку isdigit(); функцию
Why so seriouS
 Аватар для Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
03.04.2013, 21:34     ошибка потокового ввода cin #4
Используйте cin.clear(); и cin.sync();
Вот тема, защита от дурака:
http://www.cyberforum.ru/blogs/34326/blog1045.html
Yandex
Объявления
03.04.2013, 21:34     ошибка потокового ввода cin
Ответ Создать тему
Опции темы

Текущее время: 17:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru