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

проверка на число - C++

Восстановить пароль Регистрация
 
Goga201
0 / 0 / 0
Регистрация: 04.02.2008
Сообщений: 10
29.03.2010, 17:18     проверка на число #1
код
C++
1
2
3
4
5
6
7
8
9
10
        int index;
 
        ...
 
        while (1)
    {
    cin >> index;
    if (cin.good()) break;
    cout << "Неверный ввод! Вводите в числовом формате:"<<endl;
    }
сделал проверку, чтобы пользователь вводил числовой вариант, но если мы вводим буквы, то программа зацикливается сообщением, тоесть второй раз cin >> index; не вызывается.

Как быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.03.2010, 17:31     проверка на число #2
у меня точно такая же проблема была , вот пример использования :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 while (true){
            CharToOem("Введите количество потребителей: ",message);
            std::cout<<message;
            std::cin>>count_consumer;
            if (!cin.good() || count_consumer<=0){
                count_supplier=0;
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(),'\n');
                SetConsoleTextAttribute(con, FOREGROUND_RED | FOREGROUND_INTENSITY);
                CharToOem("Неверные данные!. ",message);
                std::cout<<message<<std::endl;
                SetConsoleTextAttribute(con, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            } else break;
        }
Добавлено через 36 секунд
тоесть надо после дописывать 2 строчки
C++
1
2
cin.clear();
 cin.ignore(numeric_limits<streamsize>::max(),'\n');
Goga201
0 / 0 / 0
Регистрация: 04.02.2008
Сообщений: 10
29.03.2010, 17:41  [ТС]     проверка на число #3
еще вариант нашел, вставить строчки
C++
1
2
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
но не очень понятно как вот это: cin.rdbuf()->in_avail() работает
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
29.03.2010, 18:02     проверка на число #4
cin.rdbuf() - возвращает указатель на буфер потока cin
streamsize in_avail( );

Returns the number of elements that are ready to be read from the buffer.
Возвращает число элементов, готовых быть прочтенными из буфера (в данном случае из буфера потока cin)

basic_istream<Elem, Tr>& ignore(
streamsize _Count = 1,
int_type _Delim = traits_type::eof( )
);

Causes a number of elements to be skipped from the current read position.
Пропускает число элементов, начиная с текущей позиции.
Yandex
Объявления
29.03.2010, 18:02     проверка на число
Ответ Создать тему
Опции темы

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