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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 07:26   #1
Radser
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию Инициализация массива, являющегося полем структуры во время создания объекта

есть структура
Код:
struct Chitatel
{
	char Familiya[20], Imya[20], Otchestvo[20], SeriyaPasport[2];
	int ID_VzyatihKnig[MAX_BOOK_ON_HANDE];
	int ChisloRogdeniya, MesyacRogdeniya, GodRogdeniya, NomerPasport, ID, KolProchKnig, KolKnigNaRukah;
};
При создании объекта этой структуры в
int ID_VzyatihKnig[MAX_BOOK_ON_HANDE];
надо записать несколько ID

Объекты создаются с помощью функции:
Код:
Chitatel ZapolnenieSpisokChitateley(int Yacheyka_chit){
	switch(Yacheyka_chit)
	{
		case 1:
			Chitatel chit1;
			strcpy(chit1.Familiya,"Iluchenok");
			strcpy(chit1.Imya,"Rostislav");
			strcpy(chit1.Otchestvo,"Ulyanovich");
			chit1.ChisloRogdeniya=1;
			chit1.MesyacRogdeniya=1;
			chit1.GodRogdeniya=1970;
			strcpy(chit1.SeriyaPasport,"GA");
			chit1.NomerPasport=737214;
			chit1.ID=1;
			chit1.KolKnigNaRukah=4;
			chit1.KolProchKnig=10;
			chit1.ID_VzyatihKnig[MAX_BOOK_ON_HANDE]=1,3,5,7;
			return chit1;
			break;
где Yacheyka_chit - индекс ячейки массива объектов.
Все, вроде, нормально, но при отладке в массиве
chit1.ID_VzyatihKnig[MAX_BOOK_ON_HANDE]=1,3,5,7;
должно быть:
1
3
5
7
а там "мусор".
Не въеду почему. Кто может объясните, плиз!
Radser вне форума Ответить с цитированием
Старый 16.01.2010, 08:53   #2
Yaqro
 
Регистрация: 14.01.2010
Сообщений: 6
По умолчанию

Вот так
Код:
chit1.ID_VzyatihKnig[MAX_BOOK_ON_HANDE]=1,3,5,7;
делать нельзя. Надо так:
Код:
chit1.ID_VzyatihKnig[0]=1;
chit1.ID_VzyatihKnig[1]=3;
chit1.ID_VzyatihKnig[2]=5;
chit1.ID_VzyatihKnig[3]=7;
Yaqro вне форума Ответить с цитированием
Старый 16.01.2010, 09:00   #3
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

А Вы тут не инициализируете, инициализировать можно только при объявлении переменной, а объявлена она у Вас вот:
Код:
Chitatel chit1;
Если хотите именно инициализировать, то писать надо так
Код:
Chitatel chit1 = {"Iluchenok", "Rostislav", "Ulyanovich", "GA", {1,3,5,7}, 1, 1, 1970, 737214, 1, 4, 10};
Или заносить значения в массив по одному

P.S. И не смешивайте понятия объект и структура, это очень разные вещи, между ними много лет эволюции
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 16.01.2010, 09:07   #4
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию

Код:
#include <iostream>

struct Chitatel
{
	int ID_VzyatihKnig[5];
};

Chitatel ZapolnenieSpisokChitateley(int Yacheyka_chit)
{
	switch(Yacheyka_chit)
	{
		case 1:
			Chitatel chit1;
			chit1.ID_VzyatihKnig[5]=10;
			printf("%i ",chit1.ID_VzyatihKnig[5]);
			return chit1;
			break;
	};
};

	int main()
	{
		ZapolnenieSpisokChitateley(1);
		system ("pause");
		
		return 0;
	};
Я упростил структуру и ее заполнение. Вот так в студии выводится значение, хранящееся в 5 элементе массива. можно проверить как обозревателем кода, так и вывести на печать. Только вот присвоить пятому элементу несколько значений не выйдет, т.к. в нем может хранится только одно значение типа int. Т.е. не верно писать chit1.ID_VzyatihKnig[5]=10,2,23; Надо для каждого элемента значение присвоить отдельно. А вообще, в студии у меня этому элементу присвоилось значение первого из указанных чисел. При инициализации сперва обнулите массив-это хороший тон. Перепроверьте.
smile
sinj вне форума Ответить с цитированием
Старый 18.01.2010, 00:14   #5
Radser
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию

Спасибо народ, помоглось, въехал и переделал.
Radser вне форума Ответить с цитированием
Старый 18.01.2010, 00:50   #6
Sapfil
Пользователь
 
Аватар для Sapfil
 
Регистрация: 11.01.2010
Сообщений: 24
По умолчанию

Ребят... Меня одного смущает эта запись?
Цитата:
Сообщение от sinj Посмотреть сообщение

struct Chitatel
{
int ID_VzyatihKnig[5];
...
...
chit1.ID_VzyatihKnig[5]=10;
Sapfil вне форума Ответить с цитированием
Старый 18.01.2010, 00:57   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2sinj
Код:
	switch(Yacheyka_chit)
	{
		case 1:
			Chitatel chit1;
			chit1.ID_VzyatihKnig[5]=10;
			printf("%i ",chit1.ID_VzyatihKnig[5]);
			return chit1;
			break;
	};
1. создавать объекты в блоке case нельзя (без границ времени жизни)
2. если написал return, то зачем еще и break?

2Sapfil
Цитата:
Ребят... Меня одного смущает эта запись?
если закрыть глаза на корявое именование и странную логику, то по видимому да
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 вне форума Ответить с цитированием
Старый 18.01.2010, 01:21   #8
Sapfil
Пользователь
 
Аватар для Sapfil
 
Регистрация: 11.01.2010
Сообщений: 24
По умолчанию

2pproger
я так и не понял... Объявлен массив из пяти элементов

int ID_VzyatihKnig[5]

значит его последним элементом будет chit1.ID_VzyatihKnig[4] и значит обращение к элементу chit1.ID_VzyatihKnig[5]=10 - должно быть ошибкой - запись значения за пределы массива.
Sapfil вне форума Ответить с цитированием
Старый 18.01.2010, 01:24   #9
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Sapfil да, точно, не заметил. по-видимому зря за питон сел...
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 вне форума Ответить с цитированием
Старый 18.01.2010, 13:59   #10
Radser
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию

Ну вы ребят фанаты!!!! Я уже заметил свои ошибки, поисправлял их, а вы все не унимаетесь. Завидую такой одержимости. Мой респект!!!
Radser вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойств объекта во время выполнения процедуры Gypsy Общие вопросы Delphi 4 28.12.2009 11:49
VS 2008 C# - Инициализация массива обьектов kasper298 Помощь студентам 0 17.11.2009 23:40
[C++] Инициализация массива структур отдельно от объявления MariyaL Помощь студентам 0 30.09.2009 12:27
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36
Инициализация массива указателей. Непонятно !!! Adamant Общие вопросы C/C++ 2 05.11.2007 16:22