RafaTheMen 0 Posted May 18, 2020 Report Share Posted May 18, 2020 (edited) 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 May 18, 2020 by RafaTheMen Erro no titulo do tópico Link to post Share on other sites
Solution Rui Carlos 367 Posted May 19, 2020 Solution Report Share Posted May 19, 2020 Começa por deixar de usar variáveis globais, e suspeito que ficas com o problema resolvido com extra 1 Report Rui Carlos Gonçalves Link to post Share on other sites
RafaTheMen 0 Posted May 20, 2020 Author Report Share Posted May 20, 2020 Obrigado Rui Carlos Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now