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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2010, 21:08   #1
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию Некорректное чтение из файла

Здравствуйте.
Есть односвязный список, который записывает данные в файл, читает их оттуда и выводит на экран. Так вот, считывает почему-то только последний элемент в списке. Помогите найти ошибку.

main.cpp:
Код:
#include"list.h"
void main(){
	fl=fopen("LIST.txt","r+b");
	list Name;
	Name.Add();
	Name.Add();
	Name.Add();
	Name.Print();
	fclose(fl);
}
list.h:
Код:
#include<cstdlib>
#include<cstdio>
#include<cstring>
	FILE *fl;
class cell{
	friend class list;
	char str[20];
	long drift;
	cell *Next;
};
class list{
	cell *Head, *Last;
	int Count;
public:
	list();
	~list();
	void Add();
	void Print();
};
list::list(){
	Head=Last=NULL;
	Count=0;
}
list::~list(){

}
void list::Add(){
	cell *Temp=new cell;
	printf("Input name: ");
	scanf("%s",Temp->str);
	Temp->drift=NULL;
	Temp->Next=NULL;
	if(!Head){
		Head=Last=Temp;
		fseek(fl,Last->drift,SEEK_CUR);
		fputs(Last->str,fl);
		fwrite(&Last->drift,sizeof(long),1,fl);
	}
	else{
		Last->drift=strlen(Last->str);
		Last->Next=Temp;
		Last=Temp;
		fseek(fl,Last->drift,SEEK_CUR);
		fputs(Last->str,fl);
		fwrite(&Last->drift,sizeof(long),1,fl);
	}
	Count++;
}
void list::Print(){
	cell *Temp=Head;
	rewind(fl);
	for(int i=0;i<Count;i++){
		fseek(fl,Temp->drift,SEEK_CUR);
		fgets(Temp->str,Temp->drift,fl);
		fread(&Temp->drift,sizeof(long),1,fl);
		printf("%s%c",Temp->str,'\n');
		Temp=Temp->Next;
	}
}
alex_alpha вне форума Ответить с цитированием
Старый 26.06.2010, 21:34   #2
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

Можете пояснить, какие данные хранятся в файле LIST.txt
Вы открываете документ
Код:
fl=fopen("LIST.txt","r+b");
а дальше я не могу понять сюжетной линии...
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶
dxdy вне форума Ответить с цитированием
Старый 26.06.2010, 21:56   #3
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Цитата:
Сообщение от dxdy Посмотреть сообщение
Можете пояснить, какие данные хранятся в файле LIST.txt
Вы открываете документ
Код:
fl=fopen("LIST.txt","r+b");
а дальше я не могу понять сюжетной линии...
Далее, с помощью Add я записываю туда некие данные (строку str и ее длину drift), с помощью Print, соответственно считываю из файла и печатаю. Как-то так...
alex_alpha вне форума Ответить с цитированием
Старый 26.06.2010, 23:49   #4
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

Я ваш код просто подкорректировал, чтобы он работал:
Код:
fl=fopen("LIST.txt","w+b");
и в функции печати
Код:
void list::Print(){
	cell *Temp=Head;
	rewind(fl);
	for(int i = 0; i < Count; i++){
		fread(&Temp->drift,sizeof(long),1,fl);
		printf("%s",Temp->str);
		Temp = Temp->Next;
	}
}
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶
dxdy вне форума Ответить с цитированием
Старый 27.06.2010, 10:11   #5
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Спасибо большое
alex_alpha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла (С) spirit_trapper Помощь студентам 4 26.05.2010 19:37
Чтение из файла! balamut Общие вопросы C/C++ 8 17.05.2010 02:39
Чтение из файла e@gle Общие вопросы Delphi 3 14.12.2008 17:21
Чтение из файла... Bill Gates Общие вопросы Delphi 3 22.03.2008 22:13
Чтение файла Stanislav Общие вопросы Delphi 18 24.11.2007 20:45