fortunecat Posted April 29, 2021 at 04:08 PM Report Share #622141 Posted April 29, 2021 at 04:08 PM Boa tarde, gostaria que me pudessem ajudar em relação a este que me é dado quando 'corro' o programa. Vou também pôr aqui o enunciado caso queiram estar dentro do que me é pedido para implementar no programa, ou se estiver a fazer algo de mal ou faltar algo, por favor sintam-se na necessidade de expor a vossa opinião. Enunciado(ainda não fiz a alínea D): 1)Pretende-se analisar um conjunto de músicas. Cada música caracteriza-se pelo título, intérprete, ano, single (1:sim ou 0:não) e número de downloads nas plataformas aderentes. Obs:1. n, em todos os cabeçalhos das funções, representa o número de músicas no vetor lista; 2. utilize ponteiros em todas as alíneas para aceder ao valor dos atributos dos elementos do vetor. a) Defina o tipo de dados Musica e crie um vetor de nome lista, com um número de músicas definido pelo utilizador (valor disponível na variável nMusicas). b) Implemente uma função que escreva no ecrã, as características das músicas com mais do que um determinado número de downloads (parâmetro numD). void musicasDownload(Musica *lista, int n, int numD) c) Desenvolva uma função que receba a listagem de músicas e devolva quantas têm um dado intérprete. d) Desenvolva uma função que guarde num ficheiro binário, as músicas singles, não singles ou ambas (parâmetro tpMeio=’s’, ‘n’ ou ‘a´, respetivamente), posteriores a um determinado ano. A função deve ainda devolver o número médio de downloads dessas músicas. float gravaFichMusicas (Musica *lista, int n, int ano, char *nFich, char tpMeio) Obs. Sintaxes: FILE* fopen(const char* fileName, const char* mode); size_t fwrite (const void* ptr, size_t size, size_t nElements, FILE* file); #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <locale.h> struct Lista{ char titulo[40], inter[40]; int ano, dw; bool single; float duracao; Lista *prox; }; Lista *inicio, *fim, *aux; void inserirMusica(){ int c; Lista *novo = (struct Lista *)malloc(sizeof(struct Lista)); printf("\nNome da Musica: \t "); fgets(novo->titulo, 39, stdin); printf("Intérprete: \t "); fgets(novo->inter, 39, stdin); printf("Single: \t "); scanf("%d", &novo->single); printf("Duração da música: \t "); scanf("%f", &novo->duracao); printf("Ano de Lançamento: \t "); scanf("%i", &novo->ano); printf("Quantidade de Downloads: \t "); scanf("%i", &novo->dw); while ((c = getchar()) != '\n' && c != EOF) {} // Limpar buffer do teclado novo->prox = NULL; if (inicio == NULL){ inicio = fim = novo; }else{ fim->prox = novo; fim = novo; } } void esvaziarLista(){ char op; if (inicio == NULL){ printf("\nA fila esta vazia!\n\n"); }else{ printf("\nTem certeza que deseja esvaziar toda a lista?(s/n): "); op = getchar(); if (op == 's' || op == 'S'){ while (inicio != NULL){ aux = inicio; inicio = inicio->prox; free(aux); // Liberta memória } printf("\nA lista esvaziada com sucesso!!\n"); }else{ printf("\nA lista nao foi esvaziada!!\n"); } } } void mostrarLista(){ aux = inicio; if (inicio == NULL){ printf("\nLista de Músicas vazia!"); }else{ while (aux != NULL){ printf("Título: %s", aux->titulo); printf("Intérprete: %s", aux->inter); printf("Single: %d\n\n", aux->single); printf("Duração: %f\n\n", aux->duracao); printf("Ano de Lançamento: %i\n\n", aux->ano); printf("Quantidade de Downloads: %i\n\n", aux->dw); aux = aux->prox; } } printf("\n\n"); } void localizarInter(){ char inter[40]; aux = inicio; if (inicio == NULL){ printf("\nLista de Músicas vazia!"); }else{ printf("Digite o Intérprete que procura: "); scanf("%s", &aux); while (aux != NULL){ if (inter == aux->inter){ printf("\nIntérprete %s localizado/a!\n\n", aux->inter); printf("Título %s", aux->titulo); return; }else{ aux = aux->prox; } } if (aux == NULL){ printf("\nMúsica %s nao localizada!\n", titulo); } } printf("\n\n"); } int main(){ setlocale(LC_ALL, "Portuguese"); int op, c; do{ printf("| 1. Inserir Música |\n"); printf("| 2. Pesquisar Músicas |\n"); printf("| 3. listar Músicas |\n"); printf("| 4. Limpar Lista |\n"); printf("| 5. Sair |\n"); printf("Insira a sua escolha: "); scanf("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} // Limpar buffer switch (op){ case 1: inserirMusica(); printf("\nMusica inserida com sucesso!!\n\n"); system("pause"); break; case 2: localizarMusica(); system("pause"); break; case 3: mostrarLista(); system("pause"); break; case 4: esvaziarLista(); system("pause"); break; case 5: printf("\nO programa foi encerrado com sucesso!!\n\n"); system("pause"); break; default: printf("\nEscolha Invalida!!\n\n"); system("pause"); break; } system("cls"); }while (op != 5); return 0; } Link to comment Share on other sites More sharing options...
Rui Carlos Posted April 29, 2021 at 05:57 PM Report Share #622148 Posted April 29, 2021 at 05:57 PM Já não programo em C há muitos anos, mas parece-me que o problema é teres Lista *novo em vez de struct Lista *novo. Rui Carlos Gonçalves 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