Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

sapires

Array de estruturas em estruturas ???

Mensagens Recomendadas

sapires    0
sapires

Boas, tenho este programa:

(podem fazer copiar colar que está a funcionar)

o meu problema é que consigo criar um arrays para guardar os albuns mas dentro de cada albuns tenho de guardar um numero de musicas mas so consigo guardar 1 musica pois nao consigo fazer um array para a segunda estrutura, é possivel fazer?

#include <stdio.h>
#include <stdlib.h>
#define MAXALBUNS 96

typedef struct musicas{
char titulo_musica[20];
char artista[20];
int tempo_musica;
}MUSICA;

typedef struct albuns{
MUSICA faixa;
int num_musicas;
char titulo_CD[15];
char editora[5];
int ano;
}ALBUNS;

void ler(struct albuns musica[MAXALBUNS]);
void mostrar(int i,int j, struct albuns musica[MAXALBUNS]);
     
void ler(struct albuns musica[MAXALBUNS]){
     int i,j;
     printf("Introduza o numero do album a adicionar:\n");
     scanf("%d",&i);
     fflush(stdin);
     printf("Titulo Album %d:\n",i);
     gets(musica[i].titulo_CD);
     printf("Editora:\n");
     gets(musica[i].editora);
     printf("Ano:\n");
     scanf("%d",&musica[i].ano);
     printf("Introduza o numero de musicas do album %d\n",i);
     scanf("%d",&musica[i].num_musicas);
     for(j=0;j<musica[i].num_musicas;j++){
     fflush(stdin);
     printf("\nTitulo Musica %d:\n",j+1);
     gets(musica[i].faixa.titulo_musica);
     printf("Artista:\n");
     gets(musica[i].faixa.artista);
     printf("Tempo de musica:\n");
     scanf("%d",&musica[i].faixa.tempo_musica);
     };
     fflush(stdin);
     mostrar(i,j,musica);
     };
     
void mostrar(int i, int j,struct albuns musica[MAXALBUNS]){;
     fflush(stdin);
     printf("\n\nIntroduziu  o album %d:\n",i);
     fflush(stdin);
     printf("Titulo Albun %d: %s\n",i,musica[i].titulo_CD);
     printf("Editora: %s\n",musica[i].editora);
     printf("Ano: %d\n",musica[i].ano);
     printf("Numero de musicas do album %d: %d \n",i,j);
     for(j=0;j<musica[i].num_musicas;j++){
     fflush(stdin);
     printf("\nTitulo Musica %d: %s\n",j+1,musica[i].faixa.titulo_musica);
     printf("Artista: %s\n",musica[i].faixa.artista);
     printf("Tempo de musica: %d \n",musica[i].faixa.tempo_musica);
     };
     system("PAUSE");
     };     
    
int main(int argc, char *argv[])
{
  struct albuns musica[MAXALBUNS];  
  ler(musica);
  
  system("PAUSE");	
  return 0;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Se nao te importares de usar espaco extra para musicas nao existentes, define o array de musicas dentro do album

#define MAX_MUSICAS_EM_ALBUM 500

struct albuns {
  struct musicas faixa[MAX_MUSICAS_EM_ALBUM];
  /* ... */
};

Senao, tens que usar ponteiros, malloc(), talvez realloc() tambem, e free()

struct albuns {
  struct musicas *faixa;
};

/* ... */

            musica[i].faixa = malloc(numfaixas * sizeof *musica[i].faixa);

/* ... */

                   strcpy(musica[i].faixa[j].titulo_musica, "foobar");
                   strcpy(musica[i].faixa[j].artista, "foobar");
                   musica[i].faixa[j].tempo_musica = 42;

/* ... */

            free(musica[i].faixa);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade