Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Altafard
1 / 1 / 2
Регистрация: 05.04.2013
Сообщений: 26
1

Проверка типа данных при вводе

05.04.2013, 20:52. Просмотров 1862. Ответов 4
Метки нет (Все метки)

Задача: реализовать проверку на то, что пользователь ввёл целое число.
Нашёл это:

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
//Зачем использовать шаблон?
template<class T> //Для чего нужна Т?
T correct_input(const std::string&  prompt) //Передаём строку
{
    for(;;) //Это бесконечный цикл?
    {
        std::cout << prompt; //Вывели переданную строку
        std::string  str_val; //Создали новую строку для вводимого значения
        std::cin >> str_val; //Считали значение
        std::istringstream  ssin(str_val); //Что происходит в этом месте? Что такое ssin?
        T  val; //Создали переменную с типом Т... тот же вопрос: зачем Т??
        if(ssin >> val) //Непонятно условие! Что возвращает это условие и какие значения вообще может принимать?
        {
            std::string  tmp; //Создали ещё одну строку
            if(!(ssin >> tmp)) //Сравнили с созданной строкой непонятный ssin
                return  val; //Если условие вернуло true, возвращаем val... но где мы присваиваем значение этой
                                //переменной? Что тут возвращается то?
            else
                std::cerr << "INPUT ERROR" << std::endl; //Иначе выдаём ошибку
        }
        else
            std::cerr << "INPUT ERROR" << std::endl;
    }
};
 
int main()
{
    int n = correct_input<int>("Input int val: "); //Инициализируем целую переменную и проверяем
    return 0;
}
Код не мой! Работает. Работает правильно, но хотелось бы знать как именно ибо некоторые моменты мне совсем не понятны! Я не догоняю до самой логики кода, алгоритма. Помогите пожалуйста разобраться!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 20:52
Ответы с готовыми решениями:

Поведение cin при вводе некорректного типа данных
Был создан цикл: while (err) //bool err = true { try { cin &gt;&gt; arrsz // int...

Бесконечный цикл при вводе несоответствующего типа данных
Цикл, который просит ввести пользователя число, если это число ни одно из чисел 1, 2 или 3, то цикл...

Проверка на правильность при каждом вводе
Здравствуйте. Подскажите пожалуйста как можно осуществить проверку при каждом вводе? К примеру...

Проверка ошибок при вводе (cin)
Привет, у меня тут при вводе фигня какая-то происходит. Вот код: int width; while (true) {...

Проверка дубликатов в массиве при вводе
Приветствую. Задача: разрешить ввод элемента только в том случае, если такого элемента массива еще...

4
Ded_Vasilij
232 / 214 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
05.04.2013, 20:58 2
можно все проще сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Readint()
{
    int a;
    cin >> a;
    if (!cin)
    {
        cin.clear();
        while (cin.peek() !='\n')
            cin.ignore();
        cin.ignore();
    }
    return a;
}
1
Altafard
1 / 1 / 2
Регистрация: 05.04.2013
Сообщений: 26
05.04.2013, 21:07  [ТС] 3
Проще не стало ни сколько. Программа неадекватно ведёт себя с буквами, при вводе не целых чисел, выводится лишь целая часть, а дробная попросту откидывается!

Само собой юзер может ввести всё что угодно! А надо предлагать ввод до тех пор, пока не будет считано целое число
0
Ded_Vasilij
232 / 214 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
05.04.2013, 21:43 4
на буквы реагирует адекватно, зря вы так, я давно этим кодом пользуюсь, для мелких нужд годится, а для дробей надо подумать
0
Why so seriouS
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
05.04.2013, 21:59 5
Вот есть простой пример как можно проверить входные данные на корректность:
http://www.cyberforum.ru/blogs/34326/blog1045.html
1
05.04.2013, 21:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 21:59

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

Ввод и проверка при вводе чисел в диалогах
Никаких проблем не возникает при вводе десятичных чисел. А вот с шестнадцатиричными как быть? Есть...

При вводе действительного Е не принимает значения типа float
Здравствуйте, нужна помощь, программа, выполняющая следующие задания с помощью рекурсии. Вроде бы...


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

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

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