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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2008, 18:18   #1
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию Контроль ввода данных в классе

Добрый, возникла задача - реализовать класс комплексных чисел, собственно класс написал, все как бы замечательно. Вот его объявление:

Код:
class MyComplex 
{
	private: 
	double re, mi;
	public:
		MyComplex(); 
		MyComplex(double a, double b); 
		MyComplex& operator-(MyComplex& op); 
		MyComplex& operator+(MyComplex& op); 
		MyComplex& operator*(MyComplex& op); 
		MyComplex& operator/(MyComplex& op); 
		MyComplex& operator=(MyComplex& op); 
		friend istream& operator >> (istream& in, MyComplex& com) 
		{
			char buf; 
			in >> buf; in >> com.re; in >> buf; in >> com.mi; in >> buf; 			return in;
			}
		friend ostream& operator << (ostream& out, MyComplex& com) 
		{
			out << "(" << com.re << "," << com.mi << ")";
			return out; 
		}
};
ввод данных подразумевается в формате (a,b), т.е. пользователь должен так и ввести: открывающая скобка, действительная часть, запятая, мнимая чать, закрывающая скобка. Так вот хотелось бы, конечно, организовать проверку введенных данных, я могу сделать с помощью if, проверять каждое введенное значение, buf, com.re, buf, com.mi, buf
Но т.к. я относительно недавно начал изучать потоки, возникают трудности с тем, как корректно это обрабатывать. Т.е. выловил я неверное значение, что делать ? Как прервать ввод, вернуть ошибку, или что то в этом роде ? Или возможно попросить пользователя заново ввести данные. Но возникает еще один момент, что если ввести несколько неверных символов подряд, они столько же раз обработаются, в итоге у меня выходило, что на экран несколько раз подряд выводилось сообщение о необходимости переввести даные.
oleg kutkov вне форума Ответить с цитированием
Старый 14.04.2008, 22:19   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от oleg kutkov Посмотреть сообщение
Т.е. выловил я неверное значение, что делать ?
Это не так просто, как кажется. Если строка состоит из "неправильных" символов, результатом будет 0. Если из нулей - тоже 0. Так что Вам, видимо, придется сделать маленький парсер. Форматированый ввод можно сделать примерно так:
Код:
		friend istream& operator >> (istream& ins, MyComplex& com) 
		{
			ins.ignore(80, '(' );
			ins >> com.re;
			ins.ignore(80, ',' );
			ins >> com.mi;
			ins.ignore(80, ')' );
			
			return ins;
		}
B_N вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экзамен в 9 классе по ИВТ NecRoMat Свободное общение 6 11.06.2008 11:56
обработка ситуации неверного ввода данных Sweta Помощь студентам 0 22.11.2007 17:13
проверка ввода данных в форму @Simpson JavaScript, Ajax 1 12.11.2007 02:17