Zagnieżdzanie tablic struktur w strukturach.

0

Witam serdecznie, męczę się z problemem, w którym nie mogę przejść pełną liczbę elementów struktury zagnieżdżonej w strukturze.
Może jaśniej:

Mam tak zdefiniowane struktury:

#include <stdio.h>
#include <stdlib.h>
/*----------------------------------------------------------------------------*/
struct Tutwor
{
	char autor[30];
	char wykonawca[30];
	int czas;
};

struct Tinfcd
{
	char tytul[50];
	char nazwisko[20];
	char nazwa[20];
	int rok;
	int cena;
	struct Tutwor tab_tutwor[25];
}; 

Kolejno chce jak na razie uzupełnić 10elementową tablicę struktur Tinfcd (POLA TYLKO : rok, cena) oraz przejść i uzupełnić 25 elementową tablicę zagnieżdoną strutury Tutwor (POLE TYLKO : czas).

void wypelnij(struct Tinfcd tab_infcd[]);
void wyswietl(struct Tinfcd tab_infcd[]);
/*----------------------------------------------------------------------------*/
int main(int argc, char *argv[]) 
{	
	#define ROZMIAR 10
	struct Tinfcd tab_infcd[ROZMIAR];
	
	int zarodek=time(NULL);
	srand(zarodek);	
	wypelnij(tab_infcd);
	wyswietl(tab_infcd);
	getche();
	return 0;
}
/*----------------------------------------------------------------------------*/
void wypelnij(struct Tinfcd tab_infcd[])
{	
	int i,j;
	
	for(i=0;i<ROZMIAR;i++)
	{
		tab_infcd[i].rok=rand()%50+1960;
		tab_infcd[i].cena=rand()%50+20;
		for(j=0;j<25;j++);
		{
			tab_infcd[i].tab_tutwor[j].czas=5;
		}
	}
}
/*----------------------------------------------------------------------------*/
void wyswietl(struct Tinfcd tab_infcd[])
{
	int i,j;
	
	for(i=0;i<ROZMIAR;i++)
	{
		printf("Rok wydania: %d.\n",tab_infcd[i].rok);
		printf("Cena: %.2d PLN.\n",tab_infcd[i].cena);
		for(j=0;j<25;j++);
		{
			printf("Czas: %d.\n",tab_infcd[i].tab_tutwor[j].czas);
		}
		printf("----------------------\n");
	}	
	
}
/*----------------------------------------------------------------------------*/ 

Program sie kompiluje, ale efektem jest przejście tylko 1 raz przez petle wewnetrzna for j=0;j<25;j++, a powinno byc 25 przejsc.
Nie wiem dlaczego, czy dobrze jest ta deklaracja struct Tutwor tab_tutwor[25];
?
Dziekuje za pomoc.

0

hmmm najpierw to zwiększ zdefiniowane ROZMIAR na 25 jeżeli chcesz aby się powtarzało 25 razy. a najlepiej to zrób

short int ROZMIAR = 25;

i wtedy spróbuj bo nie wiem jak działa pętla z #DEFINE.

a jeszcze jedno miałeś tu błąd:

void wyswietl(struct Tinfcd tab_infcd[])
{
        int i,j;
 
        for(i=0;i<ROZMIAR;i++)
        {
                printf("Rok wydania: %d.\n",tab_infcd[i].rok);
                printf("Cena: %.2d PLN.\n",tab_infcd[i].cena);
                for(j=0;j<25;j++)
                {
                        printf("Czas: %d.\n",tab_infcd[i].tab_tutwor[j].czas);
                }
                printf("----------------------\n");
        }        
 
}

po pętli for dałeś ";"

tutaj tak samo

void wypelnij(struct Tinfcd tab_infcd[])
{        
        int i,j;
 
        for(i=0;i<ROZMIAR;i++)
        {
                tab_infcd[i].rok=rand()%50+1960;
                tab_infcd[i].cena=rand()%50+20;
                for(j=0;j<25;j++)
                {
                        tab_infcd[i].tab_tutwor[j].czas=5;
                }
        }
}

i to mogło zaważyć o twoim problemie ;)

0

Fakt, glupi srednik.
Juz wszystko dziala, wlasciwie to temat nie potrzebny, tak to jest jak zmeczonym i bez snu siada sie do pisania. Moje niedopatrzenie.
Mozna to skasowac wlasciwie ( ten temat), wyszedłem na głupola :D

EDITT::

Ale nie usuwajmy tematu, chcialbym sie jeszcze poradzic, bo musze wypelnic te pozostale pola

#include <stdio.h>
#include <stdlib.h>
/*----------------------------------------------------------------------------*/
struct Tutwor
{
        char autor[30];
        char wykonawca[30];
        int czas;
};
 
struct Tinfcd
{
        char tytul[50];
        char nazwisko[20];
        char nazwa[20];
        int rok;
        int cena;
        struct Tutwor tab_tutwor[25];
};  

W ktorych mamy tablice znakow, tekstami losowanymi.
W Pascalu mniej wiecej bylo to takie cos, ze tworzylem sobie tablice z elementami (tak jak typ wyliczeniowy). I kiedy wypelnialem pola rekordow, to losowalem sobie ten element z tej tablicy i przypisywalem do rekordu, cos w stylu : rekord.imie:=imiona[random(5)+1];, imiona byly tablica stringow=('Darek',Jarek'....);

I teraz jak to zrobic w jezyku C: uwtorzylem sobie tablice takich stalych tekstow :

char tytul[16][50]={"The Division Bell","A Momentary Lapse of Reason","The Final Cut,The Wall","Wish You Were Here","The Dark Side of the Moon","Obscured by Clouds","Meddle","Atom Heart Mother","Ummagumma","Parnoid","Master of Reality","Sabotage","Black Bloody Sabbath","Never Say Die","Heaven and Hell","The Mob Rules",}; 

I chcę je wstawić do tego pola np. char tytul[50];

Jak to zrobic, metoda z losowaniem analogicznie jak w pascalu nie zadzialala mi. Albo cos zle deklaruje, probowalem tez typ wyliczeniowy z C : enum, ale tez nie wiedzialem jak.

0

no to w takim razie w pętlach wewnętrznych zamiast "ROZMIAR" wpisz 25, bo on nie widzi tego ROZMIAR. I popraw te pętle co tam edytowałem post

//edit Każdemu się zdarza ;)

0

Edytowalem wyzej post, moglbys zernac na to? Jak wygenerowac teksty z tablicy do pola struktury ?

Probowalem takie cos:

tab_infcd[i].tytul=(tytul[rand()%16+1])

Ale nie przechodzi, tytul to tablica z tekstami.

0

strcpy()

1 użytkowników online, w tym zalogowanych: 0, gości: 1