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

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

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

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

05.04.2013, 20:52. Просмотров 1130. Ответов 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;
}
Код не мой! Работает. Работает правильно, но хотелось бы знать как именно ибо некоторые моменты мне совсем не понятны! Я не догоняю до самой логики кода, алгоритма. Помогите пожалуйста разобраться!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 20:52     Проверка типа данных при вводе
Посмотрите здесь:

Проверка типа вводимых данных. C++
Организация вычислений при вводе данных. C++
C++ Ввод и проверка при вводе чисел в диалогах
C++ Как организовать сравнение строкового типа при вводе?
Обработка данных при вводе C++
Использование знака пробел при вводе переменной типа char[] C++
C++ Программа крашится при вводе данных
C++ Проверка вводимых данных на соответствие типа
При вводе действительного Е не принимает значения типа float C++
Проверка ошибок при вводе (cin) C++
C++ Бесконечный цикл при вводе несоответствующего типа данных
C++ Проверка дубликатов в массиве при вводе

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ded_Vasilij
231 / 213 / 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
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
05.04.2013, 21:43     Проверка типа данных при вводе #4
на буквы реагирует адекватно, зря вы так, я давно этим кодом пользуюсь, для мелких нужд годится, а для дробей надо подумать
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     Проверка типа данных при вводе
Ответ Создать тему
Опции темы

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