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

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

Восстановить пароль Регистрация
 
Altafard
1 / 1 / 0
Регистрация: 05.04.2013
Сообщений: 26
05.04.2013, 20:52     Проверка типа данных при вводе #1
Задача: реализовать проверку на то, что пользователь ввёл целое число.
Нашёл это:

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;
}
Код не мой! Работает. Работает правильно, но хотелось бы знать как именно ибо некоторые моменты мне совсем не понятны! Я не догоняю до самой логики кода, алгоритма. Помогите пожалуйста разобраться!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ded_Vasilij
 Аватар для Ded_Vasilij
229 / 211 / 15
Регистрация: 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;
}
Altafard
1 / 1 / 0
Регистрация: 05.04.2013
Сообщений: 26
05.04.2013, 21:07  [ТС]     Проверка типа данных при вводе #3
Проще не стало ни сколько. Программа неадекватно ведёт себя с буквами, при вводе не целых чисел, выводится лишь целая часть, а дробная попросту откидывается!

Само собой юзер может ввести всё что угодно! А надо предлагать ввод до тех пор, пока не будет считано целое число
Ded_Vasilij
 Аватар для Ded_Vasilij
229 / 211 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
05.04.2013, 21:43     Проверка типа данных при вводе #4
на буквы реагирует адекватно, зря вы так, я давно этим кодом пользуюсь, для мелких нужд годится, а для дробей надо подумать
Why so seriouS
 Аватар для Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
05.04.2013, 21:59     Проверка типа данных при вводе #5
Вот есть простой пример как можно проверить входные данные на корректность:
http://www.cyberforum.ru/blogs/34326/blog1045.html
Yandex
Объявления
05.04.2013, 21:59     Проверка типа данных при вводе
Ответ Создать тему
Опции темы

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