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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2011, 00:19   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию fstream. Читает больше чем записал =\

Вроде проверка на eof есть. Но читает больше на одну запись. Если после f.read добавить if (f.eof()) break; то всё нормально. Но это как-то кривовато...
Код:
int VectorToFile(vector<CharInfo> &v, const char *file)
{
	sort(v.begin(), v.end());
	
	ofstream f(file, ios::app|ios::binary);
	int i;
	for (i=0; i<v.size(); i++)
	{
		f.write((char *)&v[i], sizeof(CharInfo));		
	}

	return i;
}

int VectorFromFile(vector<CharInfo> &v, const char *file)
{
	ifstream f(file, ios::in|ios::binary);
	if (!f||f.eof())
		return 0;
	CharInfo ci;
	int i=0;
	do
	{
		f.read((char *)&ci, sizeof(CharInfo));
		i++;
		v.push_back(ci);
	} while (!f.eof());
	return i;
}
UPD:
Извиняюсь, потоки надо закрывать =)

Последний раз редактировалось TwiX; 01.09.2011 в 00:35.
TwiX вне форума Ответить с цитированием
Старый 01.09.2011, 00:35   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

1. если CharInfo - структура, то это говнокод. читай, почему структуры так записывать (и читать, естественно) нельзя. совсем недавно только писал про это
2. что за корявый алгоритм чтения? зачем цикл с постусловием и 2 проверки на конец файла? зачем вести какой то счетчик (i), если ты пихаешь все в вектор, у которого есть метод size?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 01.09.2011 в 00:41.
pproger вне форума Ответить с цитированием
Старый 01.09.2011, 01:02   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

1. Да, это структура. В ней нет никаких указателей. Что в этом может быть плохого?
2. Постусловие недавно переписал из просто while-цикла. Подумал, что проблема может быть в этом. А вот со счётчиком и в правду чего-то тупанул)

UPD:
Нашёл ваш пост, почитал. Довольно интересно, спасибо. Но основной вопрос заключался в другом. Почему же считывается на 1 структуру больше?

Последний раз редактировалось TwiX; 01.09.2011 в 01:28.
TwiX вне форума Ответить с цитированием
Старый 01.09.2011, 01:28   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ну проверка на Еоф это нормально . ведь сначала его считываешь (и выводишь) а потом только флаг еоф поднимается
onewho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аргументов ЕСЛИ больше чем 7 Freerider1972 Microsoft Office Excel 40 16.05.2011 10:44
Задача где неизвестных больше чем известных. poolt Microsoft Office Excel 17 01.12.2010 02:28
Больше чем LongInt Dionix Общие вопросы Delphi 7 17.07.2010 16:30
Чем больше объектов - тем меньше скорость? Diego__ Microsoft Office Word 6 05.01.2010 01:39
Да тестостерона в 3 раза больше чем норма HellMercenariess Свободное общение 3 25.08.2009 22:52