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

Как сделать чтоб все проверки вызывались одной функцией? - C++

Восстановить пароль Регистрация
 
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
16.06.2014, 15:53     Как сделать чтоб все проверки вызывались одной функцией? #1
Доброго времени суток! Имеется код с огромным числом вот таких проверок:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cout << "\nEnter number (-100000 to 100000): ";
while(!(cin>>x) || (x<(-100000)) || (x>100000) || cin.get() != '\n' ) //incorrect input protection
{
    cout<<"Input incorrect. Please, try again.\n";
    cin.clear(); // resets all bits of stream
    cin.sync(); //remove data from the buffer
    cout << "\nEnter number (-100000 to 100000): ";
}
 
cout << "\nEnter accuracy (1 to 5): ";
while(!(cin>>e) || (e<1) || (e>5) || cin.get() != '\n' ) //incorrect input protection
{
    cout<<"Input incorrect. Please, try again.\n";
    cin.clear(); // resets all bits of stream
    cin.sync(); //remove data from the buffer
    cout << "\nEnter accuracy (1 to 5): ";
}
Как сделать чтоб все эти проверки вызывались одной функцией? Спасибо заранее.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
16.06.2014, 16:01     Как сделать чтоб все проверки вызывались одной функцией? #2
Условие в while и тип вводимой переменной везде одинаков?
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
16.06.2014, 16:04  [ТС]     Как сделать чтоб все проверки вызывались одной функцией? #3
И можно ли сделать чтобы менялся тип элемента в функции? Там x - float, а e - int, но функцию одну можно сделать для них?

Добавлено через 1 минуту
Вот) Опоздал просто. Тип разный может быть. Возможно ли для разных типов сделать одну функцию? while везде одинаков, но, как Вы уже заметили, текст меняется.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
16.06.2014, 16:07     Как сделать чтоб все проверки вызывались одной функцией? #4
C++
1
2
3
4
5
6
7
8
9
10
void check_something(char num, int low, int upper)
{
    if (num < low || num > upper || num != '\n')
    {
        std::cout<<"Input incorrect. Please, try again.\n";
        std::cin.clear(); 
        std::cin.sync();
        std::cout << "\nEnter accuracy ("<< low << " to " << upper <<"): ";
    }
}
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
16.06.2014, 16:12  [ТС]     Как сделать чтоб все проверки вызывались одной функцией? #5
Тамика, Спасибо, но не совсем то. Мы вот тут
C++
1
!(cin>>x)
проверяем подходит ли нам тип, а если char, то теряется суть проверки. Да и текст в последнем cout меняется. Его нужно как-то скопировать.

Сделать можно несколько функций для разных типов, а как с текстом в cout быть я понятия не имею.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
16.06.2014, 16:16     Как сделать чтоб все проверки вызывались одной функцией? #6
Цитата Сообщение от Donville Посмотреть сообщение
Сделать можно несколько функций для разных типов, а как с текстом в cout быть я понятия не имею.
С каким именно текстом?
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
16.06.2014, 16:18  [ТС]     Как сделать чтоб все проверки вызывались одной функцией? #7
Тут такой
C++
1
cout << "\nEnter number (-100000 to 100000): ";
а тут такой
C++
1
cout << "\nEnter accuracy (1 to 5): ";
и там еще дюжина. Текст разный, а проверка, по сути, одинаковая везде.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
16.06.2014, 16:25     Как сделать чтоб все проверки вызывались одной функцией? #8
Функция принимает параметры low и upper. Вводите их при вызове функции.
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
16.06.2014, 16:31  [ТС]     Как сделать чтоб все проверки вызывались одной функцией? #9
Цитата Сообщение от Тамика Посмотреть сообщение
"\nEnter accuracy ... ";
Вот этот текст в Вашем коде должен каждый раз менятся.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
16.06.2014, 16:40     Как сделать чтоб все проверки вызывались одной функцией? #10
Цитата Сообщение от Donville Посмотреть сообщение
Вот этот текст в Вашем коде должен каждый раз менятся.
Ааа... Нет, тут не подскажу. Сама не знаю. Ручками, наверное.
Или извратом - тоже передавать слово параметром в функцию.
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
17.06.2014, 02:11  [ТС]     Как сделать чтоб все проверки вызывались одной функцией? #11
nmcf, выручай

Добавлено через 7 часов 23 минуты
Что, не знает никто?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 03:21     Как сделать чтоб все проверки вызывались одной функцией?
Еще ссылки по теме:

Как сделать так чтоб работало? Что с компилятором? C++
Как сделать так , чтоб возвращались первоначальные значения массива, перед работой с функцией C++
Сделать все задание в одной программе) C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.06.2014, 03:21     Как сделать чтоб все проверки вызывались одной функцией? #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class T>
void check_something(T low, T upper, string str)
{
    std::cout << str << low << " to " << upper <<"): ";
    T x;
    while (!(cin >> x) || x < low || x > upper || cin.get() != '\n')
    {
        std::cout<<"Input incorrect. Please, try again.\n";
        std::cin.clear(); 
        std::cin.sync();
        std::cout << str << low << " to " << upper <<"): ";
    }
}
C++
1
check_something (2, 6, "Enter accuracy (");
Yandex
Объявления
17.06.2014, 03:21     Как сделать чтоб все проверки вызывались одной функцией?
Ответ Создать тему
Опции темы

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