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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 12:18   #1
rommster
Пользователь
 
Регистрация: 05.10.2010
Сообщений: 46
По умолчанию Перегрузка оператора "поместить в поток"

Пытаюсь перегрузить операторы >> и << для ввода вывода чисел в формате (###) ###:####. Проблема с оператором чтения из потока, почему то считывается в итоге только первый элемент first, остальные остаются пустыми. В чём моя ошибка?
Код:
#include <iostream>
using namespace std;

class FormatNumber{
	friend ostream &operator << (ostream &, const FormatNumber &);
	friend istream &operator >> (istream &, FormatNumber &);
private:
	char first[4];
	char second[4];
	char third[5];
};

ostream &operator << (ostream &output, const FormatNumber &num)
{
	output<<"("<<num.first<<") "
		<<num.second<<":"<<num.third;

	return output;
}

istream &operator >> (istream &input, FormatNumber &num)
{
	input.ignore();  				// пропуск символа "("
	input.getline(num.first,4);
	input.ignore(2);  				// пропуск символов ") "
	input.getline(num.second,4);
	input.ignore(); 				// пропуск символа ":"
	input.getline(num.third,5);
	return input;
}

int main()
{
	FormatNumber number;
	cout<<"Input number as (###) ###:####"<<endl;
	cin>>number;

	cout<<"You enter: "<<number<<endl;

	system("pause");
	return 0;
}

Последний раз редактировалось rommster; 23.10.2010 в 12:26.
rommster вне форума Ответить с цитированием
Старый 23.10.2010, 14:46   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

используй более типичную ф-цию для чтения из потока - read, а в конце не забудь добавить нуль-терминатор к строке
Код:
istream &operator >> (istream &input, FormatNumber &num)
{
	input.ignore();				// пропуск символа "("
	input.read(num.first, 3);
	num.first[3] = '\0';
	input.ignore(2);  				// пропуск символов ") "
	input.read(num.second,3);
	num.second[3] = '\0';
	input.ignore();  				// пропуск символа ":"
	input.read(num.third,4);
	num.third[4] = '\0';

	return input;
}
sashonk вне форума Ответить с цитированием
Старый 24.10.2010, 07:00   #3
rommster
Пользователь
 
Регистрация: 05.10.2010
Сообщений: 46
По умолчанию

sashonk, спасибо, работает. Сделал ещё так:
Код:
istream &operator >> (istream &input, FormatNumber &num)
{
	input.ignore();  				// пропуск символа "("
	input.getline(num.first,4);
	input.clear();
	input.ignore(2);  				// пропуск символов ") "
	input.getline(num.second,4);
	input.clear();
	input.ignore(); 				// пропуск символа ":"
	input.getline(num.third,5);
	input.clear();

	return input;
}
Просто нужно было очищать поток.
rommster вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
мне нужно только в h="" поместить определенное количество пробелов...но я не знаю как Тикки Общие вопросы C/C++ 3 12.05.2010 09:26
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04