janielton 0 Denunciar post Postado Fevereiro 7, 2007 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
alexandrehdk 0 Denunciar post Postado Fevereiro 7, 2007 você está invertendo as bolas na linha:aux->prox=aux;deveria ser:aux=aux->prox; Compartilhar este post Link para o post Compartilhar em outros sites
janielton 0 Denunciar post Postado Fevereiro 7, 2007 da na mesma coisa..mas mesmo assim testei e "deu" no mesmo.. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Compartilhar este post Link para o post Compartilhar em outros sites
alexandrehdk 0 Denunciar post Postado Fevereiro 8, 2007 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
elsd 0 Denunciar post Postado Fevereiro 8, 2007 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
janielton 0 Denunciar post Postado Fevereiro 8, 2007 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