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

Универсальная функция получения числа через cin - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вставить перед каждой серией массива элемент с нулевым значением. http://www.cyberforum.ru/cpp-beginners/thread992203.html
Дан целочисленный массив размера N. Вставить перед каждой его серией элемент с нулевым значением. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии — количество этих элементов (длина серии может быть равна #include <iostream.h> int main() { int temp,i,j,N,M,A,B,C; cout <<"N="; cin >>N; for (i=1;i<=N;i++) {cout <<"A="; cin >>A;cout<<endl;
C++ Правильный айпи-адрес Здравствуйте! Помогите, пожалуйста, с задачей, заваливается на некоторых тестах. Для того чтобы выходить в Интернет, каждому компьютеру присваивается так называемый IP-адрес. Он состоит из четырех целых чисел в диапазоне от 0 до 255, разделенных точками. В следующих трех строках показаны три правильных IP-адреса: 127.0.0.0 192.168.0.01 255.00.255.255 Напишите программу, которая... http://www.cyberforum.ru/cpp-beginners/thread992201.html
C++ Программа, определяющая сумму n значных чисел, содержащих только нечетные цифры
Написать программу, определяющую сумму n-значных чисел, содержащих только нечетные цифры. Определить также, сколько четных цифр в найденной сумме. Помогите написать код, заранее спасибо:)
В одномерном массиве, состоящем из n вещественных элементов, вычислить: C++
Уважаемые знатоки С и С++. Думаю, вы понимаете, что высшее образование обязывает быть грамотным, но знать ВСЕ нереально. Мне нужна помощь. Требуется написать программку, которая делает вот что: В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1.) сумму элементов массива с нечетными номерами; 2.) сумму элементов массива, расположенных между первым и последним...
C++ Сортировка десятичных чисел в строке http://www.cyberforum.ru/cpp-beginners/thread992187.html
Всем привет. Дана строка символов, состоящая из произвольных десятичных цифр, разделенных пробелами. Вывести на экран числа этой строки в порядке возрастания их значений. Вообщем-то, я примерно понимаю как сделать: нужно закинуть в отдельный массив числа от пробела до пробела, а затем оттуда их сортировать, но с реализацией возникли проблемы, прошу помочь.
C++ Даны натуральные числа N K У кого есть код C++ или кто сможет решить? Даны натуральные числа N K. Составить программу формирования массива A, элементами которого являются числа, сумма цифр которых равна K и которые не больше N. подробнее

Показать сообщение отдельно
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.10.2013, 00:51     Универсальная функция получения числа через cin
Пытался написать универсальную функцию для гарантированного получения числа нужного типа, примерно так:

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
// Функция для безопасного получения числа указанного типа,
// оставляет поток cin в корректном состояние, вроде бы гарантированно
template <class T = double>
T getNum(const T &min = numeric_limits<T>::lowest(),
         const T &max = numeric_limits<T>::max())
{
    if (max < min)
        throw string("Ошибка в аргументах getNum, минимум больше максимума");
 
    // Для очистки потока от некорректного состояния
    auto clear = []()
    {
        cin.clear();
        cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
        //cin.sync();
        //cin.clear();
    };
 
    T num(0);
 
    do
    {
        cout << "Число должно быть больше или равно " << min
             << " и меньше или равно "                << max
             << endl;
 
        cin >> num;
 
        if (cin.fail() || cin.bad() || cin.eof())
        {
            clear();
            continue;
        }
 
    }
    while((static_cast<T>(num) < min) || (static_cast<T>(num) > max));
 
    clear();
 
    return static_cast<T>(num);
}
но что-то она не очень работает, точнее не обрабатывает как должна ввод текста вместо числа.
В частности при вызове с аргументом шаблона T = long double и рандовном набивание символов
num присваивается 0, а clear то ли не отрабатывает как надо, то ли еще что... в общем все работает не так.
Светлые умы, помогите довести до ума кто знает как

Добавлено через 18 минут
Кстати также некорректно обрабатывает ввод типа 2,,3, при нем двойка считывается как корректное значение, но поток не очищается от мусора, как я понимаю(а было бы не плохо все это непотребство отбраковывать и требовать повторный ввод).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru