С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

28.01.2014, 21:38. Просмотров 420. Ответов 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;
                    };
            };
            
        };
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 21:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отслеживание введенных данных (C++):

Каким образом организовывать ввод данных для поддержки программной обработка неправильно введенных данных? - C++
Каким образом организовывать ввод данных для поддержки программной обработка неправильно введенных данных? никак не вкурю,что бы это...

Отслеживание ввода данных в потоке cin - C++
Добрый вечер. Предположим такой код: void fiterations(int &amp;iter_i) { if (!cin) { cout &lt;&lt; &quot;Некорректный ввод данных&quot;; ...

Проверка введенных данных в С++ - C++
Задача такова: Имеется программа для работы с числами (пусть это будет, например, поднесение числа в квадрат, не суть) Соответственно,...

Проверка введенных данных - C++
Доброго времени суток. Есть программа по переводу чисел из одной системы счисления в другую. Как сделать проверку введеннвх дпнных на...

Проверка введенных данных - C++
Всем привет! Подскажите пожалуйста, каким образом можно проверить веденные данные при запросе цифр? То есть нужно проигнорить если...

Проверка корректности введенных данных - C++
Всем привет. Есть задача: Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц...

9
alsav22
5428 / 4823 / 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;
}
1
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
28.01.2014, 21:44  [ТС] #3
Спасибо большое, помогло очень. Главное работает!!!
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,934
29.01.2014, 00:01 #4
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
while (!(cin >> a) || (cin.peek() != '\n'))
alsav22, а если после числа есть пробелы? (Введём 123 и несколько пробелов перед нажатием enter.)
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 00:23 #5
Цитата Сообщение от Alex5 Посмотреть сообщение
а если после числа есть пробелы? (Введём 123 и несколько пробелов перед нажатием enter.)
Читаем:
Цитата Сообщение от alsav22 Посмотреть сообщение
// в строке ввода только цифры, перед которыми могут быть + или -.
Добавлено через 3 минуты
Проверку на '\n' можно убрать, но тогда будет правильным и такой ввод: 123a. Хотите улучшить? Я не против.
0
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
29.01.2014, 00:48  [ТС] #6
подскажите как улучшить, буду признателен
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 01:12 #7
Цитата Сообщение от ivan_es Посмотреть сообщение
подскажите как улучшить
Чтобы как работало?
0
ivan_es
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 4
29.01.2014, 01:17  [ТС] #8
Извиняюсь. не понял ваш разговор. сейчас еще раз проверил, всё работает. Спасибо еще раз. Подскажите хороший справочник по функциям, что бы больше глупых вопрос не задавать.
0
alsav22
5428 / 4823 / 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 был неправильным.
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,934
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;
}
0
29.01.2014, 21:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 21:55
Привет! Вот еще темы с ответами:

Проверка на корректность введенных данных - C++
дана задача ввести номер телефона пробел и дата в формате день. месяц. год. Выполнить простейшую проверку на корректность введенных данных....

Контроль длины введенных данных от 4 до 10 символов - C++
нужно ограничить количество введенных символов с клавиатуры в консоле, причем у введенного слова должен быть интервал От 4 до 10 символов. ...

Подсчет числа слов во введенных данных - C++
Приветствую. Имеется задание: напишите программу, которая должна вычислить, сколько раз каждое отдельное слово содержится во введенных...

корректировка уже введенных пользователем данных - C++
Работаю в консоли. Пользователю выдаются показатели бух.баланса, после чего проверяется, сошелся баланс или нет (при инициализации...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.