Karolinne 0 Denunciar post Postado Maio 12, 2010 Boa noite gente, Estou fazendo um trabalho da faculdade de estrutura de dados, temos que implementar utilizando listas. O código ainda não está todo pronto, mas ta dando o seguinte erro: Quando adiciono um estado e uma cidade e aperto t chamo uma função que era para aparecer o nome do estado e da cidade, só que só ta aparecendo o nome do estado... E o nome da cidade bugado. Se puderem ajudar agradeço. Estrutura... #include <stdio.h> #include <stdlib.h> #include "inclui.h" void verificar(); void pesquisar(); void mostrar(PAIS principal) { while(principal->prox != NULL) { printf("%s", principal->prox->nome); printf("%s", principal->prox->prim->prox->nome); principal = principal->prox; } } int main() { PAIS principal; principal = (PAIS) malloc(sizeof(struct estado)); principal->prox = NULL; principal->ant = NULL; char escolha; for(;;) { fflush(stdin); printf("Deseja:\n\n(A)dicionar uma pessoa \n(V)erificar todas as pessoas que existem com suas cidades e estados? \n(P)esquisar por uma pessoa, estado ou cidade\n"); scanf("%c", &escolha); switch(toupper(escolha)) { case 'A': adicionar(principal); break; case 'V': verificar(); break; case 'P': pesquisar(); case 'T': mostrar(principal); break; } } } void verificar() { printf("OI\n"); return; } void pesquisar() { printf("OI\n"); return; } Função Adicionar... #include "adicionar.h" void adicionar(PAIS principal) { PAIS aux; char estado[25]; char cidade[25]; if((aux = (PAIS) malloc(sizeof(struct estado))) == NULL) { printf("A memoria esta cheia"); return; } printf("Digite o nome do estado da pessoa\n"); fflush(stdin); scanf("%s", estado); strcpy(aux->nome,estado); aux->prox = principal->prox; aux->ant = principal; if(principal->prox!=NULL) principal->prox->ant = aux; principal->prox = aux; principal->prox->prim = (CIDADE) malloc(sizeof(struct cidade)); principal->prox->prim->prox = NULL; CIDADE aux2; printf("Digite o nome da cidade da pessoa\n"); fflush(stdin); scanf("%s", cidade); strcpy(aux2->nome,cidade); aux2->ant = principal->prox->prim; aux2->prox = principal->prox->prim->prox; if(principal->prox->prim->prox!=NULL) principal->prox->prim->prox->ant = aux2; principal->prox->prim->prox = aux2; printf("%s", principal->prox->prim->prox->nome); return; } Adicionar h... #include "inclui.h" void adicionar(PAIS principal); Inclui.h #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct estado *estadop; typedef struct cidade *cidadep; typedef struct pessoa *pessoap; struct estado { char nome[25]; estadop prox; // Ponteiro para o proximo estado estadop ant; // Ponteiro para o estado anterior cidadep prim; // Ponteiro para a primeira cidade ordenada pelo alfabeto }; struct cidade { char nome[25]; cidadep prox; // Ponteiro para a proxima cidade cidadep ant; // Ponteiro para a cidade anterior pessoap prim; // Ponteiro para a primeira pessoa ordenada pelo alfabeto }; struct pessoa { char nome[25]; pessoap prox; pessoap ant; }; typedef estadop PAIS; typedef cidadep CIDADE; Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 12, 2010 Quando adiciono um estado e uma cidade e aperto t chamo uma função que era para aparecer o nome do estado e da cidade, só que só ta aparecendo o nome do estado... E o nome da cidade bugado. Poderia ter colado a execução p/ ajudar...Nem sempre tem compilador por perto. Como por exemplo agora, já que estou atualizando o sistema. Não use fflush(stdin). Tem um tópico pinado sobre isso nos artigos. Tá faltando break num case. Acho que o while da exibição tá errado... Nunca vai mostrar o último elemento da lista. No main você não verifica se a memória foi alocada. Ao invés de for(;;) você pode usar while(1) Funções void não precisam de return. Compartilhar este post Link para o post Compartilhar em outros sites