/* 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;
}
}
Pergunta
felixaugusto123
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
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.