Ir ao conteúdo
  • Cadastre-se

C Código em C para emular as características de um Player de Música


PauloC19

Posts recomendados

Preciso desenvolver um código que para emular as características de um player de música, o mesmo precisa ser criado com o tipo de estrutura lista encadeadas...A princípio modifiquei vários parâmetros de um código base de uma lista encadeada simples. Crie funções para Adicionar e Mostrar as Músicas, mas no final o código persiste em erros, alguém pode me ajudar chegar a uma conclusão?

 

O código, e o print com os erros:

 

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

int menu();
void AdicionarMusica(char nm, char ab, float duracao);
void Playlist();

struct Playlist_Musica {
    char nm[20];
    char ab[20];
    float duracao;
    Playlist_Musica *prox;
} *Head;


int main()
{
    int op, c;
    char nm[20];
    char ab[20];
    float duracao;

    while (1) {

        Head = NULL;

        op = menu();

        switch (op) {
        case 1: //Adiciona a musica

            printf("Digite o nome da musica: ")
            scanf_s("%s" &nm);
            while ((c = getchar()) != '\n' && c != EOF) {} 
            printf("Digite o nome do artista/banda: ");
            scanf_s("%s", &ab);
            while ((c = getchar()) != '\n' && c != EOF) {} 
            printf("Digite o tempo de duracao da musica: ");
            scanf_s("%f", &duracao);
            while ((c = getchar()) != '\n' && c != EOF) {} 

            AdicionarMusica(char nm[20], char ab[20], float duracao);
            Break;
        case 2: 

            Break;
        case 3: 
            Playlist();
            break;
        case 4: 
            return 0;
            Break;
        default:
            printf("Opção invalida!\n");
        }
    }
    return 0;

int menu()
{
        int op, c;
        system("cls");
        printf("*************Menu***************")
        printf("1 - Adicionar Musica na Playlist\n");
        printf("2 - Remover Musica da Playlist\n");
        printf("3 - Playlist\n");
        printf("4 - Sair\n");
        printf("Escolha a opcao desejada:\n");

        scanf_s("%d", &op);
        while ((c = getchar()) != '\n' && c != EOF) {} // Limpa o buffer do teclado

        system("cls");
        return op;
}

    void AdicionarMusica(char nm, char ab, float duracao)
    {
        Playlist_Musica *NovaElemento;
        NovaElemento = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica));
        NovoElemento->dado = nm[20];
        NovoElemento->dado = ab[20];
        NovoElemento->dado = duracao;
        
            if (Head == NULL)
            {
                Head = NovoElemento;
                Head->prox = NULL;
            }
            else
            {
                NovoElemento->prox = Head;
                Head = NovoElemento;
            }
    }

    void Playlist()
    {

        Playlist_Musica *ElementoVarredura;
        ElementoVarredura = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica));


        ElementoVarredura = Head;
        if (ElementoVarredura == NULL) {
            return;
        }
        while (ElementoVarredura != NULL) {
            printf("Musica: %s", ElementoVarredura->nm);
            printf("Artista/Banda %s", ElementoVarredura->ab);
            printf("Duracao %f", ElementoVarredura->duracao);

            ElementoVarredura = ElementoVarredura->prox;
        }
        printf("\n");

        system("pause");
        return;
    }
 

Erros.thumb.PNG.55d21986c442f6861187d57c10bf306a.PNG

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Seu código tem vários erros de sintaxe:

#include<string.h> //incluir esse header
  
AdicionarMusica(char nm[20], char ab[20], float duracao); //nm e ab sao arrays
(...)
printf("Digite o nome da musica: "); //faltou o ";"
scanf_s("%s", nm);//faltou a "," - nao precisa do "&" ja que nm e um array
(...)
scanf_s("%s", ab); //nao precisa do "&" j
(...)
AdicionarMusica(nm, ab, duracao);//ao chamar a funcao, nao precisa especificar novamente os tipos das variaveis
break;//b minusculo - verifique os outros
(...)
return 0;
}//faltou essa chave
int menu()
(...)
void AdicionarMusica(char nm[20], char ab[20], float duracao)
    {
        Playlist_Musica *NovoElemento;//NovO
        NovoElemento = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica)); 
        //NovoElemento->dado = nm[20]; nao é assim que funciona - nao existe esse campo dado
		strcpy(NovoElemento->nm, nm);
        //NovoElemento->dado = ab[20]; nao é assim que funciona
        strcpy(NovoElemento->ab, nm);
        //NovoElemento->dado = duracao;
        NovoElemento->duracao = duracao;

Veja se funciona agora

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Boa noite. Obrigado! todos os erros foram eliminados, e o programa está executando...Mas agora, a parte para mostrar/listar, a função "Playlist" para imprimir na tela a músicas que foram adicionadas, não aparece as informações, quando digita a opção 3, volta para o menu, um loop infinito...O que está errado? será que é esse while, e esses comandos nessa parte do código?

 

void Playlist()
    {

        Playlist_Musica *ElementoVarredura;
        ElementoVarredura = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica));


        ElementoVarredura = Head;
        if (ElementoVarredura == NULL) {
            return;
        }
        while (ElementoVarredura != NULL) {
            printf("Musica: %c", ElementoVarredura->nm);
            printf("Artista/Banda %c", ElementoVarredura->ab);
            printf("Duracao %f", ElementoVarredura->duracao);

            ElementoVarredura = ElementoVarredura->prox;
        }
        printf("\n");

        system("pause");
        return;
    }
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 Head = NULL;//move essa linha para fora do while
    while (1) {
(..)
void Playlist()
    {
        Playlist_Musica *ElementoVarredura;
        //ElementoVarredura = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica)); nao precisa disso
(...)
while (ElementoVarredura != NULL) {
            printf("Musica: %s ", ElementoVarredura->nm); //para imprimir strings use %s e nao %c
            printf("Artista/Banda %s ", ElementoVarredura->ab); //para imprimir strings use %s e nao %c
            printf("Duracao %f ", ElementoVarredura->duracao);
            ElementoVarredura = ElementoVarredura->prox;
             printf("\n");//bota essa quebra de linha dentro do laco
        }

Veja se funciona com essas alterações.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Estou quase lá, com essas alterações imprimiu na tela as informações, com %c e com %s, aparece um erro.

O código com %c, executa, mas as informações que são imprimidas na tela aparecem de forma incorreta, quando modifca colocando %s, ao digitar o nome da música e apertar enter ele apresenta o seguinte erro:

 

1229701867_Erroscanf_s.PNG.5ae8cff74f4a514c0a09b49ec3667cf8.PNG

Código com %c: Não mostra as informações da forma correta.

15891611_Informaesincorretas.PNG.ba934e6d89ba66c9c4d8401e53c8b293.PNG

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Boa noite! O erro ao apertar enter quando digitado o nome da música, foi solucionado com essas alterações, mas continua a imprimir a informações de forma incorreta. 

 

Alterações feita nos scanf_s:

 

int main()
{
    int op, c;
    char nm[20];
    char ab[20];
    float duracao;

    Head = NULL;

    while (1) {

        op = menu();

        switch (op) {
        case 1: //Adiciona a musica

            printf("Digite o nome da musica: ");
            scanf_s("%s", nm, 20);
            while ((c = getchar()) != '\n' && c != EOF) {} // Limpa o buffer do teclado
            printf("Digite o nome do artista/banda: ");
            scanf_s("%s", ab, 20);
            while ((c = getchar()) != '\n' && c != EOF) {} // Limpa o buffer do teclado
            printf("Digite o tempo de duracao da musica: ");
            scanf_s("%f", &duracao);
            while ((c = getchar()) != '\n' && c != EOF) {} // Limpa o buffer do teclado

            AdicionarMusica(nm, ab, duracao);
            break;

 

Parte do código para imprimir as informações na tela:

 

void Playlist()
{

    Playlist_Musica *ElementoVarredura;
    ElementoVarredura = (struct Playlist_Musica *)malloc(sizeof(struct Playlist_Musica));


    ElementoVarredura = Head;
    if (ElementoVarredura == NULL) {
        return;
    }
    while (ElementoVarredura != NULL) {
        printf("Musica: %s", ElementoVarredura->nm);
        printf("Artista/Banda %s", ElementoVarredura->ab);
        printf("Duracao %f", ElementoVarredura->duracao);

        ElementoVarredura = ElementoVarredura->prox;
        printf("\n");
    }

 

1598141491_Erroimprimir.PNG.b026657671f6ef1afbe5cc713349d480.PNG

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...