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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2009, 22:29   #1
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию исключительные ситуации в шаблонных классах

Код:
    try
	{
		cin>>i;
		if(i>32767 || i<-32768) throw exception(i);
	}
	catch(exception e) { e.print(); }
переменная i -шаблонная, как реализовать обработку исключит ситуации по вместимости, макс и мин кол-во знаков.....
и как обратотать ситуацию когда переменная i приняла тип int , а вводим char


помогите или подтолкните идей как это сделать

Последний раз редактировалось kedbl4; 22.11.2009 в 22:31.
kedbl4 вне форума Ответить с цитированием
Старый 22.11.2009, 23:29   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

если я не ошибаюсь, то в шаблонных классах на каждый тип данных нужно писать свой обработчик
counter вне форума Ответить с цитированием
Старый 22.11.2009, 23:34   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А чего Вы хотите добиться всем этим? Класс exception принимает в качестве параметра C-строку(указатель на массив символов), нельзя в него просто так передавать i, тем более, если её тип неопределён.
netrino вне форума Ответить с цитированием
Старый 22.11.2009, 23:40   #4
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
А чего Вы хотите добиться всем этим? Класс exception принимает в качестве параметра C-строку(указатель на массив символов), нельзя в него просто так передавать i, тем более, если её тип неопределён.
может конечно я не так сформулировал вопрос.....хочу добиться чтобы при в вводе в int допустим числа 123***********65565 тоесть за передел инта, обрабатывался мусор и просил повторный ввод корректного инта
kedbl4 вне форума Ответить с цитированием
Старый 22.11.2009, 23:47   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Хм... Для этого нужно перехватывать исключения со стороны cin, или же проверять его флаги на корректность последней операции:
Код:
	do {
		cin.clear();
		cin.sync();
		cin >> n;
		if(cin.fail())
			cout << "Error of input! Try again\n";
	} while( cin.fail() );
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 00:03   #6
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Хм... Для этого нужно перехватывать исключения со стороны cin, или же проверять его флаги на корректность последней операции:
Код:
	do {
		cin.clear();
		cin.sync();
		cin >> n;
		if(cin.fail())
			cout << "Error of input! Try again\n";
	} while( cin.fail() );
спс огромное, подскажите еще такую ситуацию.....должен вводиться тип int ввожу строку...зациклить до норм ввода int
kedbl4 вне форума Ответить с цитированием
Старый 23.11.2009, 00:06   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну, собственно, именно этим вышеприведённый код и занимается, если тип переменной n - int
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 00:13   #8
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Ну, собственно, именно этим вышеприведённый код и занимается, если тип переменной n - int
ок, спс все понял, работает и по размеру и по типу,круто)
kedbl4 вне форума Ответить с цитированием
Старый 23.11.2009, 00:28   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Работает он именно по типу. "По размеру" срабатывает потому что какой-то конкретный тип всё равно не может вместить в себя больше чем положено ) Но, например, если n будет иметь тип char, то будет считан именно один символ, даже если Вы введёте число
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 16:31   #10
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

что делает эта функция
Код:
cin.sync();
?

и почему так не работает
Код:
			do 
			{
				cin.clear(); 
				cin.sync();
				try
				{
					cin >>number;
					if(cin.fail()) throw exception("Error of input!");
				}
				catch(exception e) {e.print();}
			} while(cin.fail());
kedbl4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключительные ситуации (Delphi) VadEr Помощь студентам 6 01.06.2009 13:46
Исключительные ситуации BulbaZavr Общие вопросы C/C++ 3 29.12.2008 23:05
Исключительные ситуации FIIR БД в Delphi 5 19.06.2008 16:30
Исключительные ситуации FIIR Помощь студентам 1 19.06.2008 13:50
Исключительные ситуации Mickle Общие вопросы Delphi 6 07.10.2007 21:03