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

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

02.08.2015, 23:41. Просмотров 1003. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2015, 23:41
Ответы с готовыми решениями:

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

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

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

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

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

8
lss
931 / 860 / 355
Регистрация: 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
kuza84
23 / 23 / 7
Регистрация: 25.04.2013
Сообщений: 195
03.08.2015, 19:05  [ТС] 3
Цитата Сообщение от lss Посмотреть сообщение
cin.peek()
Цитата Сообщение от lss Посмотреть сообщение
cin.get()
Цитата Сообщение от lss Посмотреть сообщение
cin.clear()
что за функции где их описывают?
0
lss
931 / 860 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.08.2015, 19:13 4
Цитата Сообщение от kuza84 Посмотреть сообщение
что за функции где их описывают?
http://www.cplusplus.com/reference/istream/istream/
1
03.08.2015, 19:13
Mr.X
Эксперт С++
3193 / 1720 / 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
kuza84
23 / 23 / 7
Регистрация: 25.04.2013
Сообщений: 195
04.08.2015, 01:01  [ТС] 6
так можете сказать, почему происходит мерцание на экране в моем случае?
зачем производить
C++
1
std::cin.sync();
синхронизацию, что она делает и дает?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
04.08.2015, 09:21 7
kuza84, убирает лишние символы окончания строки, которые остаются в потоке.

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

Добавлено через 1 минуту
А вот тут всё прям разжёвано и в рот положено (на русском).
1
Croessmah
++Ͻ
15896 / 9018 / 1734
Регистрация: 27.09.2012
Сообщений: 22,171
Записей в блоге: 2
Завершенные тесты: 2
04.08.2015, 09:31 8
gru74ik, например, под Linux'ом ничего не уберется.

Добавлено через 2 минуты
http://www.cplusplus.com/reference/istream/istream/sync/
Specifics of the operation depend on the particular implementation of the stream buffer object associated to the stream.
1
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
04.08.2015, 10:00 9
Цитата Сообщение от Croessmah Посмотреть сообщение
под Linux'ом ничего не уберется
А, да, это только в студии:
Заметным исключением является Visual Studio, где эта операция удаляет необработанные входные при вызове с стандартного входного потока.
0
04.08.2015, 10:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2015, 10:00

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

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

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


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

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

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