Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

@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
Postado
 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
Postado

@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
Postado

@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

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!