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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 08:26   #1
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию Ввод структур в динамический список

Имеется структура: название товара, магазина, цена, количество. Необходимо создать динамический список структур вводя данные "с экрана". Вот последний мой вариант функции:
Код:
struct dat{
	char name[15];
	char mag[20];
	char price[5];
	char num[5];
};
struct dm{
	dat data;
	dm *next;
};

dm* scrn(dm* list){		
	dat nov;
	dm *pv = new dm; int ch, ok=1, i=1;
	list=0;
	while(1){
		cout << i << ": " << endl; i++;
		cout << Rus("Товар: "); cin >> nov.name;
		cout << Rus("Магазин: "); cin >> nov.mag;
		cout << Rus("Цена: "); cin >> nov.price;
		cout << Rus("Количество: "); cin >> nov.num;
		pv->data=nov;
		pv->next=list;
		cout << Rus("1 Далее; 2 Завершить: "); cin >> ch;
		switch(ch){
			case 1: list=pv; break;
			case 2: goto END;
		}
	}
	END:0;
	return pv;
}
при вводе одной структуры всё в порядке, но если вводить больше на выходе читает только последнюю введённую
Mahin вне форума Ответить с цитированием
Старый 20.04.2011, 09:15   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Так и должно быть, ведь указатель вновь созданной структуры, указывает на последнюю.
Для просмотра всех структур, необходимо пройти по циклу от начала до NULL.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.04.2011, 09:46   #3
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

А можно реализовать ввод как в стеке - последний введёный имеет адрес начала и содержит адрес предыдущего введённого?
Mahin вне форума Ответить с цитированием
Старый 20.04.2011, 09:56   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Можно. Но для этого Вам нужно ввести ещё один указатель, который будет указывать на предыдущую структуру. Адрес начала Вы должны хранить в переменной, иначе как осуществлять поиск?
При прохождении структур в обратном порядке в нём нет необходимости т.к. первая структура будет содержать - NULL.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.04.2011, 10:30   #5
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

большое спасибо, кажется начал понимать. Выкладываю рабочий вариант, если кому интересно:
Код:
dm* scrn(dm* list){		
	dat nov;а
	list->next=0;
	dm *pv = new dm; int ch, ok=1, i=1;
	while(1){
		cout << i << ": " << endl; i++;
		cout << Rus("Товар: "); cin >> nov.name;
		cout << Rus("Магазин: "); cin >> nov.mag;
		cout << Rus("Цена: "); cin >> nov.price;
		cout << Rus("Количество: "); cin >> nov.num;
		if(ok) {
			list->data=nov;
			pv=list;
			ok=0;
		}
		else {
			pv=new dm;
			pv->next=list;
			pv->data=nov;
			list=pv;
		}
		cout << Rus("1 Далее; 2 Завершить: "); cin >> ch;
		switch(ch){
			case 1: break;
			case 2: goto END;
		}
	}
	END:0;
	return pv;
}
Mahin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ввести данные в динамический массив структур? sunplant Общие вопросы C/C++ 6 28.01.2011 17:10
Массив структур(Ввод из файла) ApXoH Общие вопросы C/C++ 2 04.06.2010 00:19
Динамический массив структур RaZveDchiK Помощь студентам 1 31.08.2008 21:44
Динамический массив структур Kostyakovich Помощь студентам 4 20.04.2008 21:59