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.
#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
Desculpem se o post não se encontra bem formatado.
Aguardo a vossa ajuda o quanto antes, por favor.
Cumprimentos a todos