Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2012, 15:49   #1
andego
 
Регистрация: 13.12.2011
Сообщений: 4
По умолчанию Как фильтровать ввод переменных?

Возник такой вот вопрос - возможно ли не допускать попадания переменной типа char (к примеру) в переменную типа int?
В чем собственно проблема:
К примеру если:

do{
cin>>variable;

switch(variable)
{
.
.
.
}
}while(variable!=0);

ввести знак, то программа уходит в бесконечный loop...

Как можно ограничить ввод?
andego вне форума Ответить с цитированием
Старый 20.04.2012, 16:37   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от andego Посмотреть сообщение
Возник такой вот вопрос - возможно ли не допускать попадания переменной типа char (к примеру) в переменную типа int?
Чего?

Цитата:
Сообщение от andego Посмотреть сообщение
В чем собственно проблема:
К примеру если:

do{
cin>>variable;

switch(variable)
{
.
.
.
}
}while(variable!=0);

ввести знак, то программа уходит в бесконечный loop...

Как можно ограничить ввод?
Ну так введите 0 с клавиатуры и условие цикла не выполнится
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 20.04.2012, 16:53   #3
andego
 
Регистрация: 13.12.2011
Сообщений: 4
По умолчанию

Цитата:
Ну так введите 0 с клавиатуры и условие цикла не выполнится
Это само собой...наверное я путано объяснил но суть в том чтобы не допустить чтобы был введен значок а не цифра. То есть если программой буду пользоваться не я а к примеру моя бабушка - неправильный ввод (такой как в данном случае) повесит программу. Как можно избежать подобного?
andego вне форума Ответить с цитированием
Старый 20.04.2012, 17:02   #4
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

просто сделай перед выводом проверку,
Код:
if(variable== '1' || variable== '2' ||variable== '3' ||variable=='4' итд...
{
cout << "erorr" << endl;
else
{
cout << variable << endl;
}
}
stdio вне форума Ответить с цитированием
Старый 20.04.2012, 17:37   #5
andego
 
Регистрация: 13.12.2011
Сообщений: 4
По умолчанию

Спасибо! Как всегда думалось о гораздо более трудоемких решениях

К сожалению не работает....пример самой простой программы:

Код:
#include <iostream>
using namespace std;

int main()
{
	int choice;

	do{
             cin>>choice;

             if (choice <1 || choice>3)
		      {
			do{
				cout<<"error"<<endl;
				cin>>choice;

			   }while(choice <1 || choice>3);
		      }
		
           switch (choice)
		{
		case 1:
			{
				cout<<"a"<<endl;
				break;
			}

		case 2:
				{
					cout<<"b"<<endl;
				break;
			}
		case 3:
				{
					cout<<"c"<<endl;
				break;
			}
		case 4:
			{
                          exit(1);
                        }

		}
	}while(choice>0 && choice<5);

return 0;
}
Если ввести любой значок в переменную choice программа уходит в бесконечный цикл...как не дать пользователю вводить неверные данные?

Последний раз редактировалось Stilet; 21.04.2012 в 12:06.
andego вне форума Ответить с цитированием
Старый 20.04.2012, 18:41   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

andego

суть в том чтобы не допустить чтобы был введен значок а не цифра.

Код:
int i;

while(true)
{
    std::cin >> i;
    if (std::cin.good() && std::cin.eof())
        break;
   std::cerr << "Ты чё мне какую-то лажу подсунул, насяльника! Цифры давай, ёпта!" << std::endl;
}
Rififi вне форума Ответить с цитированием
Старый 20.04.2012, 18:59   #7
andego
 
Регистрация: 13.12.2011
Сообщений: 4
По умолчанию

Rififi
Спасибо! Честно говоря не знал о существовании таких функции. Расширили мой кругозор
andego вне форума Ответить с цитированием
Старый 20.04.2012, 19:07   #8
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

так ты перед выводом организуй проверку на введённую информацию, отсекая всё не нужное. тебе только буквы нужны ? или что?
stdio вне форума Ответить с цитированием
Старый 21.04.2012, 11:23   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Как вариант, иногда более предпочтительный, вводить все как строки, потом проверять, и брать числа, если нужно
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно фильтровать данные в форме!!! strateg1970 Microsoft Office Access 3 03.10.2011 15:31
Фильтровать в ClientDataSet marakuz БД в Delphi 5 02.11.2010 22:19
как фильтровать данные в DBLookupComboBox Иван прогер Общие вопросы Delphi 0 26.04.2010 15:26
Фильтровать записи в форме с помощью переключателей Swatch Microsoft Office Access 0 18.12.2009 11:08
ввод нескольких переменных в одной строке ЛЕХА_Г Помощь студентам 2 18.12.2009 01:19