Jump to content

Inicializar um array de structs


RafaTheMen
Go to solution Solved by Rui Carlos,

Recommended Posts

Boa noite, estou a fazer um programa o qual necessita de um array com elementos do tipo Filme. Estou a ter um problema em inicializar esse array de Filmes e não consigo perceber o que estou a fazer de errado. Está fora de questão, inicializar o array fazendo, por exemplo, Filme lista[10]. Eu quero inicializa-lo usando malloc. Percisava que alguém, além de me dizer onde está o meu erro, me explica-se, por favor, o que estou a fazer mal e se possivel de forma a que eu nunca mais tenha um problema do genero, pois é recorrente estes tipo de erro.

 

CODIGO:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct movie{
	int codigo;
	char titulo[50];
	char genero[20];
	char realizador[50];
	int ano;
	int duracao;
} Filme;

int tam = 10;
int nFilmes = 0;

Filme *lista = (Filme*) malloc(tam*sizeof(Filme)); <<<<<<-------O ERRO DÁ AQUI!

//1º Requisito
int addFilme(int code, char* title, char* genere, char* autor, int year, int time){

	if(nFilmes<((tam*75)/100)){
		lista[nFilmes].codigo = code;
		strcpy(lista[nFilmes].titulo,title);
		strcpy(lista[nFilmes].genero,genere);
		strcpy(lista[nFilmes].realizador,autor);
		lista[nFilmes].ano = year;
		lista[nFilmes].duracao = time;
		nFilmes++;
	}else{
		lista = realloc(lista,tam*2);

		if(lista == NULL){
			printf("Ocorreu um erro a alocar memória!\n");
			exit(1);
		}
		
		tam = tam*2;
		lista[nFilmes].codigo = code;
		strcpy(lista[nFilmes].titulo,title);
		strcpy(lista[nFilmes].genero,genere);
		strcpy(lista[nFilmes].realizador,autor);
		lista[nFilmes].ano = year;
		lista[nFilmes].duracao = time;
		nFilmes++;
	}
return 0;
}


void inserirFilme(){
int codigo, ano, duracao;
char titulo[50], realizador[50], genero[20];

	printf("Nome do filme: ");
	scanf("%[^\n]",titulo);
	printf("Genero: ");
	scanf("%[^\n]",genero);
	printf("Realizador: ");
	scanf("%[^\n]",realizador);
	printf("Ano: ");
	scanf("%d",&ano);
	printf("Duração: ");
	scanf("%d",&duracao);

	if(addFilme(codigo, titulo,genero,realizador,ano,duracao) == 0){
		printf("Filme adicionado com sucesso!\n");
	}else{
		printf("Ocorreu um erro na inserção!\n");
	}	
}


//4º Requisito
void listaFilmesRealizadorTempo(char* nome, int tempo){
	printf("Código\tTitulo\t\tRealizador\t\tGenero\t\tAno\t\tDuração\n");

	for(int i=0; i<nFilmes; i++){
		if((strcmp(lista[i].realizador,nome) == 0) && (lista[i].duracao > tempo)){
			printf("Código: %d\n",lista[i].codigo);
			printf("Titulo: %s\n",lista[i].titulo);
			printf("Realizador: %s\n",lista[i].realizador);
			printf("Genero: %s\n",lista[i].genero);
			printf("Ano: %d\n",lista[i].ano);
			printf("Duração: %d\n",lista[i].duracao);		
		}
	}
}


int main(){
char tipo[20];
char realizador[50];
int time;

	inserirFilme();
	inserirFilme();
	inserirFilme();
	printf("Digite o realizador e a duração minima dos filmes a pesquisar!\n");
	printf("Nome do realizador: ");
	scanf("%[^\n]",realizador);
	printf("DUração minima do filme: ");
	scanf("%d",&time);
	listaFilmesRealizadorTempo(realizador, time);

	return 0;
}

O erro que me é devolvido é:

error: initializer element is not constant

 

Aguardo a vossa ajuda o quanto antes, por favor.

Cumprimentos a todos

Edited by RafaTheMen
Erro no titulo do tópico
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.