Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

janielton

lista encadeada

Recommended Posts

pessoal, o programa cadastra mas na hora de listar esta dando problema e nao consigo descobrir qual é..

#include <stdlib.h>#include <stdio.h>struct dados {	   char nome[20];	   int rg;	   dados *prox;	   };void inserir();void listar();void menu();struct dados *inicio;int main(){	inicio=NULL;	menu();	}void inserir(){	 if (inicio == (struct dados*)NULL) {		 inicio=(struct dados*)malloc(sizeof(struct dados));		  }	  	 dados *novo;	 novo=(struct dados*)malloc(sizeof(struct dados));	 dados *aux;	 aux = inicio;	 aux->prox=novo;	 novo->prox=NULL;	 printf("digite o nome");	 scanf("%s",&novo->nome);	 printf("digite o rg");	 scanf("%d",&novo->rg);		 }	 void listar(){	 if (inicio == (struct dados*)NULL) {		 printf("nao existe cadastro\n");		  }	  	 else {			 dados *aux;			 aux=inicio->prox;			 while (aux->prox!=NULL) {			 printf("nome: %s\n",aux->nome);			 printf("rg: %d\n",aux->rg);			 aux->prox=aux;		   }		  }}void menu(){ int op; while(op!=5) {    printf("\n\n1 - Adicionar Contato\n2 - Listar Contato\n5 - Sair\n");  scanf("%d",&op);  switch (op)	{	case 1: inserir();break;	case 2: listar();break;	default: system("pause");break;	}  }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei umas modificadas pra você. Veja quais foram as modificações para compreender o que tinha de errado.

#include <stdlib.h>#include <stdio.h>struct dados {    char nome[20];    int rg;    dados *prox;};void inserir();void listar();void menu();struct dados *inicio;int main(void){    inicio=NULL;    menu();    return 0;}void inserir(void){    if (inicio == (struct dados*)NULL) {        inicio=(struct dados*)malloc(sizeof(struct dados));        inicio->prox = NULL;    }    dados *novo;    novo=(struct dados*)malloc(sizeof(struct dados));    dados *aux;    aux = inicio;    printf("digite o nome: ");    scanf("%s",&novo->nome);    printf("digite o rg: ");    scanf("%d",&novo->rg);    novo->prox=aux->prox;    aux->prox=novo;}    void listar(void){    if (inicio == (struct dados*)NULL) {        printf("nao existe cadastro\n");    }else{        dados *aux;        aux=inicio;        do{            aux=aux->prox;            printf("nome: %s\n",aux->nome);            printf("rg: %d\n",aux->rg);        }while(aux->prox != NULL);    }}void menu(void){    int op;    while(op!=5) {        printf("\n1 - Adicionar Contato  2 - Listar Contato  5 - Sair: ");        scanf("%d",&op);        switch (op){            case 1: inserir();break;            case 2: listar();break;            default: break;        }    }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, fiz algumas modificações no código.

Este código insere os elementos do final para o inicio.

#include <stdlib.h>#include <stdio.h>struct dados {	char nome[20];	int rg;	dados *prox;};void inserir();void listar();void menu();struct dados *inicio;int main(void){	inicio=NULL;	menu();	return 0;}void inserir(void){	dados *novo;	novo=(struct dados*)malloc(sizeof(struct dados));	printf("digite o nome: ");	scanf("%s",&novo->nome);	printf("digite o rg: ");	scanf("%d",&novo->rg);	novo->prox=inicio;	inicio = novo;}	void listar(void){	if (inicio == (struct dados*)NULL) {		printf("nao existe cadastro\n");	}else{		dados *aux;		aux=inicio;		while(aux)		{			printf("nome: %s\n",aux->nome);			printf("rg: %d\n",aux->rg);			aux=aux->prox;		}	}}void menu(void){	int op;	while(op!=5) {		printf("\n1 - Adicionar Contato  2 - Listar Contato  5 - Sair: ");		scanf("%d",&op);		switch (op){			case 1: inserir();break;			case 2: listar();break;			default: break;		}	}}

Até mais!

elsd

Compartilhar este post


Link para o post
Compartilhar em outros sites

o segundo jeito seria melhor pois nao aloca memoria com o inicio, e o primeiro ficou quase igual meu monitor me explicou..valeu galera, mas agora me veio uma duvida meio "cabrosa":

 

existe diferença na leitura de aux->prox=novo e novo=aux->prox ??

ou existe aquela leitura da direita para a esquerda??

abraço e obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.