Ir ao conteúdo

Posts recomendados

Postado

Quem descobrir o erro me explique por gentileza o que está errado.

 

/*==========================================================================
                             LISTA ENCADEADA
==========================================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
//struct para o nodo da lista encadeada
//Neste modo dev\e ter um ponteiro que aponta para o tipo da lista
struct dados_produto
{
    int cod_produto;
    char nome[20];
    float valor;
    struct dados_produto *prox; //ponteiro para o pr�ximo modo

};

//variaveis globais e prototipos das funcoes
int codigo=0;
struct dados_produto *raiz; //para o ponto de partida da lista
struct dados_produto *paux; //ponteiro auxiliar


void incluir();
void incluir_fim();
void incluir_ordenado();
void excluir();
void listar();


int main()
{
    char opcao;
    raiz = NULL; //raiz recebe nulo no inicio do programa

    do
    {
         system("cls");
         printf("      MENU\n");
         printf("\nI - inclui elementos no INICIO da lista");
         printf("\nM - inclui elementos no FIM    da lista");
         printf("\nO - inclui elementos no ORDENADOS da lista");
         printf("\nE - exclui elementos da lista");
         printf("\nL - listagem");
         printf("\nS - sair\n\n");
         printf("\nDigite a opcao: ");
         opcao = getch();

         opcao = toupper(opcao);
         switch(opcao)
         {
                      case 'I': incluir();
                                break;
                      case 'M': incluir_fim();
                                break;
                      case 'O': incluir_ordenado();
                                break;
                      case 'E': excluir();
                                break;
                      case 'L': listar();
                                break;
                      case 'S': break;
                      default: printf("opcao invalida");
                      getch(); //parada de tela
         }
   }while(opcao != 'S');
   return 0;
}// main

/*------------------------------------------------------------------------
    Este procedimento do inclusao esta incluindo elementos no inicio, sem
    considerar se o valor a ser incluido j� existe ou nao, simplesmente
    inclui no inicio, entao eh um procedimento de inclusao de +*********+
                                                              |  PILHA  |
                                                              +*********+
-------------------------------------------------------------------------*/
void incluir()
{
     struct dados_produto *pnovo;
     system("cls");
     printf("=============================================================\n");
     printf("       PROCEDIMENTO DE INCLUSAO NO INICIO DA LISTA\n");
     printf("=============================================================\n");
     pnovo = (struct dados_produto*) malloc(sizeof(struct dados_produto));//parte mais importante

     printf("\nDigite o nome: ");
     fflush(stdin); //limpeza de buffer
     gets(pnovo->nome);
     printf("\nDidite o valor: ");
     fflush(stdin); //limpeza de buffer
     scanf("%f",&pnovo->valor);

     pnovo->cod_produto = ++codigo; //codigo auto inclementavel

     //faz o ponteiro de novo nodo apontar para onde a raiz
     pnovo->prox = raiz;

     //faz a raiz apontar para este novo elemento
     raiz = pnovo;

     printf("\n ELEMENTO INCLUIDO");
     getch();
}

/*------------------------------------------------------------------------
    Este procedimento do inclusao esta incluindo elementos no fim, sem
    considerar se o valor a ser incluido j� existe ou nao, simplesmente
    inclui no fim, entao eh um procedimento de inclusao de +*********+
                                                            |  FILA  |
                                                           +*********+
-------------------------------------------------------------------------*/
void incluir_fim()
{
     struct dados_produto *pnovo, *pant;
     system("cls");
     printf("=============================================================\n");
     printf("       PROCEDIMENTO DE INCLUSAO NO FIM DA LISTA\n");
     printf("=============================================================\n");
     pnovo = (struct dados_produto*) malloc(sizeof(struct dados_produto));//parte mais importante

     printf("\nDigite o nome: ");
     fflush(stdin); //limpeza de buffer
     gets(pnovo->nome);
     printf("\nDidite o valor: ");
     fflush(stdin); //limpeza de buffer
     scanf("%f",&pnovo->valor);

     pnovo->cod_produto = ++codigo; //codigo auto inclementavel
     pnovo->prox = NULL; //porque este ser� o ultimo elemento da lista

     if (raiz == NULL)
          //faz a raiz apontar para o proximo elemento
          raiz = pnovo;
     else
     {
         paux = raiz;

         while(paux->prox != NULL)
         {
         paux=paux->prox;
         }
         paux->prox = pnovo;

     }
     printf("\n ELEMENTO INCLUIDO");
     getch();
}

/*------------------------------------------------------------------------
    Este procedimento do inclusao esta incluindo elementos ordenados por
    nome, entao o elemento pode ser incluido no inicio, no meio ou no fim
    , pois o criterio de insercao e definido pelo nome (Externo a Estrutura
    de Dados), entao eh um procedimento de inclusao de  +*********+
                                                        |  PILHA  |
                                                        +*********+
-------------------------------------------------------------------------*/
void incluir_ordenado()
{

}



void excluir()
{
     int cod_aux;
     struct dados_produto *pant;
     system("cls");
     printf("=============================================================\n");
     printf("       PROCEDIMENTO DE EXCLUSAO\n");
     printf("=============================================================\n");
     printf("\n Informe o codigo a excluir: ");
     fflush(stdin);
     scanf("%d",&cod_aux);

     pant = NULL;
     paux = raiz;
     while ((paux != NULL) && (paux->cod_produto != cod_aux))
     {
           pant = paux;
           paux = paux->prox;
     }
     if (paux == NULL)
          printf("\nCodigo '%d' nao existe na linha",cod_aux);
     else
     {
         if (paux == NULL)//significa que eh o primeiro elemento
         raiz = paux->prox;
         else
         pant->prox = paux->prox;
     free(paux); //libera memoria que o nodo ocupava
     printf("\nelemento excluido");
     }
     getch();
}


void listar()
{
     system("cls");
     printf("=============================================================\n");
     printf("                 PROCEDIMENTO DE LISTAGEM\n");
     printf("=============================================================\n");

     printf("\nEnder da raiz....: %p",raiz);

     if (raiz == NULL)
     {
              printf("\nLISTA VAZIA");
     }
     else
     {
         paux = raiz;
         while (paux != NULL)
         {
               printf("\n-------------------------------------------------");
               printf("\nEnder deste nodo..: %p",paux);
               printf("\ncod_produto.......: %d",paux->cod_produto);
               printf("\nnome..............: %s",paux->nome);
               printf("\nvalor.............: %f",paux->valor);
               printf("\nEnder do prox.....: %p",paux->prox);
               paux = paux->prox;//assume o endereco do proximo nodo
         }
     }
     getch(); //parada em tela
}
  • Obrigado 1
Postado

swit so recebe numeros se quiser com letras faça menu de if else

adicionado 8 minutos depois
if (r=='i'||r=='I'){
	system("cls");
	incluir();
    }
	else if(r=='m'||r=='M'){
	system("cls");
	incluir_fim();
	}
	else if(r=='o'||r=='O'){
	system("cls");
	incluir_ordenado();
	}
	else if(r=='e'||r=='E'){
	system("cls");
	excluir();
	}
	else if(r=='l'||r=='L'){
	system("cls");
	listar();
	else {
	system("cls");
	printf("opcao invalida");
	return main();
	}

 

  • Obrigado 1
Postado

@Maisa_fernanda    talvez seja algum erro de apresentação ,   como aqui nesse trecho do seu código ,  os números do tipo float estão mostrando muitas casas decimas :

paux = raiz;
while (paux != NULL){
    printf("\n-------------------------------------------------");
    printf("\nEnder deste nodo..: %p"  ,paux                    );
    printf("\ncod_produto.......: %3d" ,paux->cod_produto       );/* organiza na 3ª  coluna             */
    printf("\nnome..............: %15s",paux->nome              );/* organiza na 15ª coluna             */
    printf("\nvalor.............: %.2f",paux->valor             );/* imprime apenas duas casas decimais */
    printf("\nEnder do prox.....: %p"  ,paux->prox              );
    paux = paux->prox;//assume o endereco do proximo nodo
}

 

  • 2 semanas depois...
Postado
Em 09/11/2019 às 13:54, Maisa_fernanda disse:

Quem descobrir o erro me explique por gentileza o que está errado.

 


/*==========================================================================
                             LISTA ENCADEADA
==========================================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
//struct para o nodo da lista encadeada
//Neste modo dev\e ter um ponteiro que aponta para o tipo da lista
struct dados_produto
{
    int cod_produto;
    char nome[20];
    float valor;
    struct dados_produto *prox; //ponteiro para o pr�ximo modo

};

//variaveis globais e prototipos das funcoes
int codigo=0;
struct dados_produto *raiz; //para o ponto de partida da lista
struct dados_produto *paux; //ponteiro auxiliar


void incluir();
void incluir_fim();
void incluir_ordenado();
void excluir();
void listar();


int main()
{
    char opcao;
    raiz = NULL; //raiz recebe nulo no inicio do programa

    do
    {
         system("cls");
         printf("      MENU\n");
         printf("\nI - inclui elementos no INICIO da lista");
         printf("\nM - inclui elementos no FIM    da lista");
         printf("\nO - inclui elementos no ORDENADOS da lista");
         printf("\nE - exclui elementos da lista");
         printf("\nL - listagem");
         printf("\nS - sair\n\n");
         printf("\nDigite a opcao: ");
         opcao = getch();

         opcao = toupper(opcao);
         switch(opcao)
         {
                      case 'I': incluir();
                                break;
                      case 'M': incluir_fim();
                                break;
                      case 'O': incluir_ordenado();
                                break;
                      case 'E': excluir();
                                break;
                      case 'L': listar();
                                break;
                      case 'S': break;
                      default: printf("opcao invalida");
                      getch(); //parada de tela
         }
   }while(opcao != 'S');
   return 0;
}// main

/*------------------------------------------------------------------------
    Este procedimento do inclusao esta incluindo elementos no inicio, sem
    considerar se o valor a ser incluido j� existe ou nao, simplesmente
    inclui no inicio, entao eh um procedimento de inclusao de +*********+
                                                              |  PILHA  |
                                                              +*********+
-------------------------------------------------------------------------*/
void incluir()
{
     struct dados_produto *pnovo;
     system("cls");
     printf("=============================================================\n");
     printf("       PROCEDIMENTO DE INCLUSAO NO INICIO DA LISTA\n");
     printf("=============================================================\n");
     pnovo = (struct dados_produto*) malloc(sizeof(struct dados_produto));//parte mais importante

     printf("\nDigite o nome: ");
     fflush(stdin); //limpeza de buffer
     gets(pnovo->nome);
     printf("\nDidite o valor: ");
     fflush(stdin); //limpeza de buffer
     scanf("%f",&pnovo->valor);

     pnovo->cod_produto = ++codigo; //codigo auto inclementavel

     //faz o ponteiro de novo nodo apontar para onde a raiz
     pnovo->prox = raiz;

     //faz a raiz apontar para este novo elemento
     raiz = pnovo;

     printf("\n ELEMENTO INCLUIDO");
     getch();
}

/*------------------------------------------------------------------------
    Este procedimento do inclusao esta incluindo elementos no fim, sem
    considerar se o valor a ser incluido j� existe ou nao, simplesmente
    inclui no fim, entao eh um procedimento de inclusao de +*********+
                                                            |  FILA  |
                                                           +*********+
-------------------------------------------------------------------------*/
void incluir_fim()
{
     struct dados_produto *pnovo, *pant;
     system("cls");
     printf("=============================================================\n");
     printf("       PROCEDIMENTO DE INCLUSAO NO FIM DA LISTA\n");
     printf("=============================================================\n");
     pnovo = (struct dados_produto*) malloc(sizeof(struct dados_produto));//parte mais importante

     printf("\nDigite o nome: ");
     fflush(stdin); //limpeza de buffer
     gets(pnovo->nome);
     printf("\nDidite o valor: ");
     fflush(stdin); //limpeza de buffer
     scanf("%f",&pnovo->valor);

     pnovo->cod_produto = ++codigo; //codigo auto inclementavel
     pnovo->prox = NULL; //porque este ser� o ultimo elemento da lista

     if (raiz == NULL)
          //faz a raiz apontar para o proximo elemento
          raiz = pnovo;
     else
     {
         paux = raiz;

         while(paux->prox != NULL)
         {
         paux=paux->prox;
         }
         paux->prox = pnovo;

     }
     printf("\n ELEMENTO INCLUIDO");
     getch();
}

/*------------------------------------------------------------------------
    Este procedimento do inclusao esta incluindo elementos ordenados por
    nome, entao o elemento pode ser incluido no inicio, no meio ou no fim
    , pois o criterio de insercao e definido pelo nome (Externo a Estrutura
    de Dados), entao eh um procedimento de inclusao de  +*********+
                                                        |  PILHA  |
                                                        +*********+
-------------------------------------------------------------------------*/
void incluir_ordenado()
{
  //função vazia

}



void excluir()
{
     int cod_aux;
     struct dados_produto *pant;
     system("cls");
     printf("=============================================================\n");
     printf("       PROCEDIMENTO DE EXCLUSAO\n");
     printf("=============================================================\n");
     printf("\n Informe o codigo a excluir: ");
     fflush(stdin);
     scanf("%d",&cod_aux);

     pant = NULL;
     paux = raiz;
     while ((paux != NULL) && (paux->cod_produto != cod_aux))
     {
           pant = paux;
           paux = paux->prox;
     }
     if (paux == NULL)
          printf("\nCodigo '%d' nao existe na linha",cod_aux);
     else
     {
         if (paux == NULL)//significa que eh o primeiro elemento
         raiz = paux->prox;
         else
         pant->prox = paux->prox;
     free(paux); //libera memoria que o nodo ocupava
     printf("\nelemento excluido");
     }
     getch();
}


void listar()
{
     system("cls");
     printf("=============================================================\n");
     printf("                 PROCEDIMENTO DE LISTAGEM\n");
     printf("=============================================================\n");

     printf("\nEnder da raiz....: %p",raiz);

     if (raiz == NULL)
     {
              printf("\nLISTA VAZIA");
     }
     else
     {
         paux = raiz;
         while (paux != NULL)
         {
               printf("\n-------------------------------------------------");
               printf("\nEnder deste nodo..: %p",paux);
               printf("\ncod_produto.......: %d",paux->cod_produto);
               printf("\nnome..............: %s",paux->nome);
               printf("\nvalor.............: %f",paux->valor);
               printf("\nEnder do prox.....: %p",paux->prox);
               paux = paux->prox;//assume o endereco do proximo nodo
         }
     }
     getch(); //parada em tela
}

 

 

adicionado 1 minuto depois

A função incluir ordenado esta vazia. Não é um erro, é a falta.

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