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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2011, 22:01   #1
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию seekg

Итак, код
Код:
void haffmancoder::analyse(fstream* file)		
{
	unsigned char *c;
	c=new unsigned char[1];
	if((*file).is_open()) 
	{
		while(!(*file).eof())
		{
			(*file).read((char*)c,1);
			mas[(int)c[0]].i++;
		}
		qsort(mas,256,sizeof(module1),comparemas);
		(*file).seekg(0);   //вот тут проблема
		(*file).read((char*)c,1);
	}
}
И собственно проблема в том, что когда я файл читать заканчиваю, делаю (*file).seekg(0) и после этого по идее я могу прочитать 1-й элемент из файла, но этого почему-то не происходит. Ну тоесть совсем ничего не происходит, как будто указатель чтения остался в конце файла.
Farrel вне форума Ответить с цитированием
Старый 23.03.2011, 22:59   #2
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Наверное
Код:
void haffmancoder::analyse(fstream &file)
и в теле функции уже вызывать просто file.seekg() и т.д.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 23.03.2011, 22:59   #3
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

(*file).seekg (0, ios::beg); ?
onewho вне форума Ответить с цитированием
Старый 23.03.2011, 23:29   #4
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

(*file).seekg (0, ios::beg); к сожалению не помогло.
А вот что имелл ввиду Sam Gold я так и не понял. Где file.seekg() уже вызывалась?
Что же касается analyse(fstream &file), то так не прокатит. Пробовал я уже писать через ссылку, продолбался над прогой битый час, на форуме тоже кстати тему поднимал и в результате забил на ссылку и просто сделал с указателем.
Farrel вне форума Ответить с цитированием
Старый 23.03.2011, 23:37   #5
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

Временно решил проблему закрыв и открыв файл заново. Работать дальше в приципе можно, но хотелось бы знать, что за ерунда с seekg случилась?
Farrel вне форума Ответить с цитированием
Старый 23.03.2011, 23:44   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Farrel Посмотреть сообщение
Итак, код
Код:
void haffmancoder::analyse(fstream* file)		
{
	unsigned char *c;
	c=new unsigned char[1];
	if((*file).is_open()) 
	{
		while(!(*file).eof())
	...
}
Вот такого:
Код:
unsigned char* c = new unsigned char[1];
делать не надо. Тем более, что Вы не освобождаете память по завершении.
Было бы достаточно просто объявить переменную типа unsigned char.
И такого:
Код:
(*file).is_open();
Тоже лучше не надо, есть же оператор ->
Код:
file->is_open();
Ну да ладно. По теме: попробуйте впихнуть туда ещё и file->clear();
netrino вне форума Ответить с цитированием
Ответ


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