RafaTheMen Posted May 18, 2020 at 01:39 AM Report Share #618136 Posted May 18, 2020 at 01:39 AM (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 at 10:14 AM by RafaTheMen Erro no titulo do tópico Link to comment Share on other sites More sharing options...
Solution Rui Carlos Posted May 19, 2020 at 12:29 PM Solution Report Share #618158 Posted May 19, 2020 at 12:29 PM 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 comment Share on other sites More sharing options...
RafaTheMen Posted May 20, 2020 at 02:01 PM Author Report Share #618170 Posted May 20, 2020 at 02:01 PM Obrigado Rui Carlos 🙂 Link to comment Share on other sites More sharing options...
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