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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
#1

Отслеживание введенных данных - C++

28.01.2014, 21:38. Просмотров 347. Ответов 9
Метки нет (Все метки)

Доброго времени суток, Уважаемые форумчане. Столкнулся с проблемой. Есть необходимость отслеживать введенные данные. Нужно что бы данные были типа int. Набрел в интернете на код(указан в первой части ф-ции, до цикла вайл) но он не работает как задумано. Как отследить, что бы пользователь не ввел букву или символ. Пишу консольное приложение. Спасибо всем отозвавшимся
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void nulling (int nol)  
        {
            for(;;)
                  if ((cin>>nol) && (cin.good()))
                      {
                          cout<<"var1= "<<nol;
                          break;
                        }
                    else
                          {
                                cout<<"\nERROR";
                                 cin.clear();
                      };
 
 
            while (nol <= 0)    
            {
                if (nol <= 0) 
                    {
                        cout << "Значение не может быть равным нулю или меньше!!!\n" << "Введите значение заново\n" ;
                        cin >> nol;
                    };
            };
            
        };
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.01.2014, 21:40     Отслеживание введенных данных #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
// в строке ввода только цифры, перед которыми могут быть + или -.
int a;
while (!(cin >> a) || (cin.peek() != '\n'))
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "Error!" << endl;
}
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
28.01.2014, 21:44  [ТС]     Отслеживание введенных данных #3
Спасибо большое, помогло очень. Главное работает!!!
Alex5
1000 / 663 / 93
Регистрация: 12.04.2010
Сообщений: 1,685
29.01.2014, 00:01     Отслеживание введенных данных #4
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
while (!(cin >> a) || (cin.peek() != '\n'))
alsav22, а если после числа есть пробелы? (Введём 123 и несколько пробелов перед нажатием enter.)
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 00:23     Отслеживание введенных данных #5
Цитата Сообщение от Alex5 Посмотреть сообщение
а если после числа есть пробелы? (Введём 123 и несколько пробелов перед нажатием enter.)
Читаем:
Цитата Сообщение от alsav22 Посмотреть сообщение
// в строке ввода только цифры, перед которыми могут быть + или -.
Добавлено через 3 минуты
Проверку на '\n' можно убрать, но тогда будет правильным и такой ввод: 123a. Хотите улучшить? Я не против.
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
29.01.2014, 00:48  [ТС]     Отслеживание введенных данных #6
подскажите как улучшить, буду признателен
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 01:12     Отслеживание введенных данных #7
Цитата Сообщение от ivan_es Посмотреть сообщение
подскажите как улучшить
Чтобы как работало?
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
29.01.2014, 01:17  [ТС]     Отслеживание введенных данных #8
Извиняюсь. не понял ваш разговор. сейчас еще раз проверил, всё работает. Спасибо еще раз. Подскажите хороший справочник по функциям, что бы больше глупых вопрос не задавать.
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 01:29     Отслеживание введенных данных #9
Цитата Сообщение от ivan_es Посмотреть сообщение
Извиняюсь. не понял ваш разговор.
Разговор о том, что Alex5 пишет, что если ввести, например, 123 и несколько пробелов, то мой код определит это как неправильный ввод (потому что есть оговорка:// в строке ввода только цифры, перед которыми могут быть + или -). Alex5 же считает (если я правильно его понял), что такой ввод должен проходить как правильный. Я ему ответил, что можно убрать проверку на '\n', тогда ввод 123 и пробелы будет правильным, но правильным станет и ввод, например, 123asd (или 123 asd), что я считаю неправильным вводом. И предложил ему улучшить код, чтобы и 123 с пробелами (до конца ввода) был правильным, и 123 asd был неправильным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 21:55     Отслеживание введенных данных
Еще ссылки по теме:

Проверка на корректность введенных данных C++
Контроль длины введенных данных от 4 до 10 символов C++
Структуры. Обработка данных, введенных с клавиатуры C++
C++ Подсчет числа слов во введенных данных
C++ Проверка введенных данных (как ограничить?)

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

Или воспользуйтесь поиском по форуму:
Alex5
1000 / 663 / 93
Регистрация: 12.04.2010
Сообщений: 1,685
29.01.2014, 21:55     Отслеживание введенных данных #10
Цитата Сообщение от alsav22 Посмотреть сообщение
чтобы и 123 с пробелами (до конца ввода) был правильным, и 123 asd был неправильным.
Можно так. Пропускаем пробелы: while( cin.peek()==' ' ) cin.get(); и смотрим, что осталось в строке.
Цитата Сообщение от ivan_es Посмотреть сообщение
Как отследить, что бы пользователь не ввел букву или символ
Разрешается ли вводить пробелы?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// возвращает true, если после числа одни пробелы 
bool readint( int & n )
{
    int a=0;
    if( ! (cin >> a) )
    {
        // ошибка при чтении 
        cin.clear();
        while (cin.get() != '\n'){}
        return false;
    }
 
    /* число прочитали успешно, но что дальше в строке ? */
 
    // пропускаем пробелы 
    while( cin.peek()==' ' )
    {
        cin.get();
    }
 
    // что в строке после пробелов? 
    if( cin.get()!='\n' )
    {
        // Ошибка. Хотя число прочитали, в строке ещё 
        // есть символы, отличающиеся от пробелов.
        while (cin.get() != '\n'){}
        return false;
    }
 
    n = a;
    return true;
}
Yandex
Объявления
29.01.2014, 21:55     Отслеживание введенных данных
Ответ Создать тему
Опции темы

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