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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2010, 23:56   #1
Lawliet32
Пользователь
 
Аватар для Lawliet32
 
Регистрация: 26.11.2009
Сообщений: 34
По умолчанию Указатель меняется без моего участия...

Доброго времени суток!

Код:
filename="c.txt";
		f=fopen(filename, "r");
		if (f)
		{
			while (!feof(f))
			{
				fgets(buf, 100, f);
				if (hc)
				{
					c->next=new Contacts;
					c=c->next;
					c->next=0;
					sscanf(buf, "%s %s %s %s %s ", &fam, &name, &otch, &num, &date);
					c->Fam=fam;
					c->Name=name;
					c->Otch=otch;
					c->Num=num;
					c->Date=date;
				}
				if (!hc)
				{
					c->next=0;
					sscanf(buf, "%s %s %s %s %s ", &fam, &name, &otch, &num, &date);
					c->Fam=fam;
					c->Name=name;
					c->Otch=otch;
					c->Num=num;
					c->Date=date;
					hc=c;
				}
				SendMessage(hLB1, LB_ADDSTRING, 0, (LPARAM)c->Fam);
			}
		fclose(f);
		}
		tmp=c;
		c=hc;
		while (c)
		{
			MessageBox(hWnd, c->Fam, "sdf", MB_OK);
			c=c->next;
		}
		c=tmp;
c, hc - глобальные переменные структуры Contacts:
Код:
class Contacts
{
public:
	char *Fam;
	char *Name;
	char *Otch;
	char *Num;
	char *Date;
	Contacts *next;
};
описаны вот так:
Contacts *c = new Contacts;
Contacts *hc = 0;

Собственно проблема в том, что загружая файл в переменную hc(первый адрес для класса контакты) всё прекрастно заносится, а после 2ого прохода по циклу while(!feof(f)) прыгает в первый if (hc) как и положено, но на выходе я уже получаю совершенно другой адрес hc равный новому c. Вследствии чего вместо нормального адреса первого элемента я получаю последний! уже голову сломал где я ошибся... помогите пож-ста
Изучаю Си\Си++
Lawliet32 вне форума Ответить с цитированием
Старый 11.05.2010, 02:09   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Вот тут:

sscanf(buf, "%s %s %s %s %s ", &fam, &name, &otch, &num, &date);

неправильно, чем бы ни являлись переменные fam, name, otch, num, date.

Ещё: не проще ли использовать структуру для этого?

Код:
if (!hc)
{
	c->next=0;
Где выделяется память под c? И зачём её выделять заранее?

Последний раз редактировалось Carbon; 11.05.2010 в 02:16.
Carbon вне форума Ответить с цитированием
Старый 11.05.2010, 15:47   #3
Lawliet32
Пользователь
 
Аватар для Lawliet32
 
Регистрация: 26.11.2009
Сообщений: 34
По умолчанию

Со структурой были какие-то проблемы ещё в начале разработки... решил класс использовать... ещё посоветовали использовать list.h там уже всё мол для Вас сделано)

Код:
char buf[100], fam[50], name[50], otch[50], num[50], date[50], b[30];
неужели неправильно? использование смотрел в примерах...

добавил
Код:
if (!hc)
				{
					c=new Contacts;
					c->next=0;
не помогает...
Изучаю Си\Си++
Lawliet32 вне форума Ответить с цитированием
Старый 11.05.2010, 19:12   #4
Lawliet32
Пользователь
 
Аватар для Lawliet32
 
Регистрация: 26.11.2009
Сообщений: 34
По умолчанию

Всё проблема решена, спасибо! если бы не тыкнули мне в этот sscanf я б и не догадался))

Код:
filename="c.txt";
		f=fopen(filename, "r");
		if (f)
		{
			while (!feof(f))
			{
				fgets(buf, 100, f);
				if (hc)
				{
					c->next=new Contacts;
					c=c->next;
					c->next=0;
					TCHAR *fam=new TCHAR[50];
					TCHAR *name=new TCHAR[50];
					TCHAR *otch=new TCHAR[50];
					TCHAR *num=new TCHAR[50];
					TCHAR *date=new TCHAR[50];
					sscanf(buf, "%s %s %s %s %s ", fam, name, otch, num, date);
					c->Fam=fam;
					c->Name=name;
					c->Otch=otch;
					c->Num=num;
					c->Date=date;
				}
				else
				{
					c=new Contacts;
					c->next=0;
					TCHAR *fam=new TCHAR[50];
					TCHAR *name=new TCHAR[50];
					TCHAR *otch=new TCHAR[50];
					TCHAR *num=new TCHAR[50];
					TCHAR *date=new TCHAR[50];
					sscanf(buf, "%s %s %s %s %s ", fam, name, otch, num, date);
					c->Fam=fam;
					c->Name=name;
					c->Otch=otch;
					c->Num=num;
					c->Date=date;
					hc=new Contacts;
					hc=c;
				}
				SendMessage(hLB1, LB_ADDSTRING, 0, (LPARAM)c->Fam);
			}
		fclose(f);
		}
Изучаю Си\Си++
Lawliet32 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не меняется поле Edit garyanikin Общие вопросы Delphi 4 15.01.2010 20:56
Ищем энтузиастов для участия в создании аудиоплеера DNX9000 Свободное общение 0 21.09.2009 23:00
Почему меняется Handle? Aistto Мультимедиа в Delphi 1 25.10.2008 11:20