Jump to content
Fórum Script Brasil
  • 0

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


Question

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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      149300
    • Total Posts
      645709
×
×
  • Create New...