Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
1

Контроль корректности ввода числа

02.08.2015, 23:41. Показов 1580. Ответов 8
Метки нет (Все метки)

В консоли в поле (Enter The Yar: )вводя нужно вводить только цифры, если ввести случайно букву то на экране консоли мерцает (Enter The Yar: ) бесконечно
C++
1
2
3
4
5
6
7
8
9
 short int Yar_f()  
{   
    Y:
    short int yar; 
    cout <<"Enter The Year: ";
    cin >> yar;
    if (yar>=YEAR_MIN && yar<=YEAR_MAX) return yar;
    else  goto Y;
}
если использовать тип переменной unsigned int yar то при вводе число со знаком минус, та же петрушка.

Нужно исключительную ситуацию писать если вводим не то что надо или есть что попроще?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2015, 23:41
Ответы с готовыми решениями:

Контроль ввода числа
Суть в том , что в данном случае код перестает работать, когда я ввожу цифру...тут у меня 1....

Контроль корректности при приведении типа указателя
Требуется максимально корректно проверить, что переменная типа viod* содержит указатель на объект...

Проверка корректности ввода
****Сразу извините, что заголовок на английском, при попытке написать по русски, вылетала...

Обеспечение корректности ввода
Здравствуйте, господа. Столкнулся с вопросом об обеспечении корректного ввода данных пользователем....

8
lss
937 / 865 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
03.08.2015, 00:55 2
Цитата Сообщение от kuza84 Посмотреть сообщение
или есть что попроще?
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
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
03.08.2015, 19:05  [ТС] 3
Цитата Сообщение от lss Посмотреть сообщение
cin.peek()
Цитата Сообщение от lss Посмотреть сообщение
cin.get()
Цитата Сообщение от lss Посмотреть сообщение
cin.clear()
что за функции где их описывают?
0
lss
937 / 865 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
03.08.2015, 19:13 4
Цитата Сообщение от kuza84 Посмотреть сообщение
что за функции где их описывают?
http://www.cplusplus.com/refer... m/istream/
1
Эксперт С++
3210 / 1737 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
03.08.2015, 20:13 5
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    const   int     YEAR_MIN        =   1900;
    const   int     YEAR_MAX        =   2015;
    int             year            =   0;
    bool            year_is_good    =   false;
 
    do
    {
        std::cout   <<  "year ("
                    <<  YEAR_MIN
                    <<  ".."
                    <<  YEAR_MAX
                    <<  ") = ";
 
        T_str   year_str;
        std::cin.sync();
        getline( std::cin,  year_str );
        size_t  ind     =   0;
 
        try
        {
            year    =   stoi    (
                                    year_str,
                                    &ind
                                );
 
            year_is_good    =   ind     >=  year_str.size();
        }
        catch(...)
        {
            year_is_good    =   false;
        }
 
        year_is_good    =       year_is_good
                            &&  YEAR_MIN    <=  year
                            &&  year        <=  YEAR_MAX;
    }
    while( !year_is_good );
 
    std::cout   <<  "year = "
                <<  year
                <<  std::endl;
 
    system("pause");
}
1
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
04.08.2015, 01:01  [ТС] 6
так можете сказать, почему происходит мерцание на экране в моем случае?
зачем производить
C++
1
std::cin.sync();
синхронизацию, что она делает и дает?
0
Эксперт CЭксперт С++
5072 / 2257 / 331
Регистрация: 20.02.2013
Сообщений: 5,595
Записей в блоге: 19
04.08.2015, 09:21 7
kuza84, убирает лишние символы окончания строки, которые остаются в потоке.

Добавлено через 3 минуты
Вот тут подробнее (на английском).

Добавлено через 1 минуту
А вот тут всё прям разжёвано и в рот положено (на русском).
1
Don't worry, be happy
17259 / 10125 / 1961
Регистрация: 27.09.2012
Сообщений: 25,336
Записей в блоге: 1
04.08.2015, 09:31 8
gru74ik, например, под Linux'ом ничего не уберется.

Добавлено через 2 минуты
http://www.cplusplus.com/refer... ream/sync/
Specifics of the operation depend on the particular implementation of the stream buffer object associated to the stream.
1
Эксперт С++
3210 / 1737 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
04.08.2015, 10:00 9
Цитата Сообщение от Croessmah Посмотреть сообщение
под Linux'ом ничего не уберется
А, да, это только в студии:
Заметным исключением является Visual Studio, где эта операция удаляет необработанные входные при вызове с стандартного входного потока.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2015, 10:00

Проверка корректности ввода
Есть класс Point, в котором поля int X, int Y, int Z; (X должен быть больше Y) Есть конструктор...

Проверка корректности ввода чисел
считывается квадратная матрица с файла Как написать условие в коде,если после пробела идет не...

Проверка корректности ввода фамилии инициалов
Нужно сделать полную проверку при вводе фамилии инициалов. Разрешаются только буквы, пробелы, две...

Проверка корректности ввода для численных типов данных
Всем добрый вечер. Столкнулся с проблемой, когда ввожу число, его нужно проверить на корректность....

3. Найти сумму элементов с k1-го по k2-ой, где k1 и k2 вводятся с клавиатуры. Сделайте проверку корректности их ввода.
3. Найти сумму элементов с k1-го по k2-ой, где k1 и k2 вводятся с клавиатуры. Сделайте проверку...

Написать функцию для ввода текущего размера массива с проверкой корректности вводимых данных
Написать функцию для ввода текущего размера массива с проверкой корректности вводимых данных.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru