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

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

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

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

05.04.2013, 20:52. Просмотров 1193. Ответов 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++
Цикл, который просит ввести пользователя число, если это число ни одно из чисел 1, 2 или 3, то цикл повторяется вновь, как только получаем...

Проверка на правильность при каждом вводе - C++
Здравствуйте. Подскажите пожалуйста как можно осуществить проверку при каждом вводе? К примеру нужно ввести много раз числа и каждый раз...

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
на буквы реагирует адекватно, зря вы так, я давно этим кодом пользуюсь, для мелких нужд годится, а для дробей надо подумать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 21:59     Проверка типа данных при вводе
Еще ссылки по теме:

Как организовать сравнение строкового типа при вводе? - C++
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void main() { ...

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

Использование знака пробел при вводе переменной типа char[] - C++
Доброго времени суток! При идентификации переменных при применении знака пробел, все, что идет до него &quot;уходит&quot; в первую переменную,...

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? - C++
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt; &quot;Hello&quot; &lt;&lt; endl; } ...

Проверка типа вводимых данных. - C++
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin &gt;&gt; x;

Проверка вводимых данных на соответствие типа - C++
Задание само очень простое - вычитание матриц, с помощью перегрузки функций (одна функция вычитает типы short, другая long double). ...


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

Или воспользуйтесь поиском по форуму:
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