Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em Lista encadeada com alocação dinâmica


felixaugusto123

Pergunta

Olá pessoal, como faço para colocar o nome de um produto nesse código? Estava tentando um string mas não consigo achar como ler e imprimir os dados.

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

/* Estrutura que será usada para criar os nós da lista */
typedef struct tipo_produto
{
int codigo; /* Codigo do produto */
double preço; /* preço do produto */
/* Proximo elemento da lista encadeada de Produtos */
struct tipo_produto *proximo;
} TProduto;
/* Prototipos das funcoes para inserir e listar produtos */
void inserir(TProduto **cabeca);
void listar (TProduto *cabeca);

int main()
{
TProduto *cabeca = NULL; /* Ponteiro para a cabeca da lista */

/* Ponteiro a ser usado para percorrer a lista
no momento de desalocar seus elementos*/
TProduto *noatual;

char q; /* Caractere para receber a opcao do usuario */
do {
printf("\n\nOpcoes: \nI -> para inserir novo produto;\nL -> para listar os produtos; \nDigite S -> para sair \n:");
scanf("%c", &q); /* Le a opcao do usuario */
switch(q)
{
case 'i': case 'I': inserir(&cabeca); break;
case 'l': case 'L': listar(cabeca); break;
case 's': case 'S': break;
default: printf("\n\n Opcao não valida");
}
 fflush(stdin); /* Limpa o buffer de entrada */


} while ((q != 's') && (q != 'S') );
/* Desaloca a memoria alocada para os elementos da lista */
noatual = cabeca;
while (noatual != NULL)
{
cabeca = noatual->proximo;
free(noatual);
noatual = cabeca;
}
}
/* Lista todos os elementos presentes na lista encadeada */
void listar (TProduto *noatual)
{

while( noatual != NULL) /* Enquanto não chega no fim da lista */
{
printf("\n Codigo do veiculo: %d \nPreco:R$%.2lf", noatual->codigo, noatual->preço);


/* Faz noatual apontar para o proximo no */
noatual = noatual->proximo;
}
}
/* Funcao para inserir um novo no, ao final da lista */
void inserir (TProduto **cabeca)
{
TProduto *noatual, *novono;
int cod;
double preço;
printf("\n Codigo do novo produto: ");
scanf("%d", &cod);
printf("\n preço do produto:R$");
scanf("%lf", &preço);

if (*cabeca==NULL) /* Se ainda não existe nenhum produto na lista */
{
/* cria o no cabeca */
*cabeca = (TProduto *) malloc(sizeof(TProduto));
(*cabeca)->codigo = cod;
(*cabeca)->preço = preço;
(*cabeca)->proximo = NULL;
}
else

    {
/* Se já existem elementos na lista, deve percorre-la
ate’ o seu final e inserir o novo elemento */
noatual = *cabeca;
while(noatual->proximo != NULL)
noatual = noatual->proximo;
/* Ao final do while, noatual aponta para o ultimo no */
novono = (TProduto *)malloc(sizeof(TProduto));/* Aloca memoria para o novo no */
novono->codigo = cod;
novono->preço = preço;
novono->proximo = NULL;
/* Faz o ultimo no apontar para o novo no */
noatual->proximo = novono;
}
}
 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...