Ir ao conteúdo
  • Cadastre-se

Variáveis aparentemente pegando lixo


S4ur0N

Posts recomendados

Este é um programa pra faculdade, onde eu preciso ler estados e cidades e armazenar em filas dinâmicas. Fiz o mesmo programa em pascal e java, mas não tenho muita experiência com c e estou tendo alguns problemas. Quando se faz poucas leituras o programa chega a finalizar, mas escreve um monte de lixo na tela. E quando é lido uns 3 ou 4 Estados o programa fecha antes de terminar. Ainda faltam alguns detalhes estéticos e falta desalocar as variáveis.

Estou o dia todo batendo cabeça e não descubro o que é:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

using namespace std;

typedef struct regCidade* tipoCidade;
typedef struct regCidade{
char cidade[30];
tipoCidade anterior;
};
typedef struct regEstado* tipoEstado;
typedef struct regEstado{
char estado[30];
tipoCidade topoCidade;
int totalCidades;
tipoEstado proximoEstado;
};

tipoEstado topoEstados;

tipoEstado lerEstado() {
tipoEstado p;
char leitura[30];
printf("Estado: ");
gets(leitura);
if (strlen(leitura)>0) {
p = (tipoEstado)malloc(sizeof(tipoEstado));
strcpy(p->estado,leitura);
p->topoCidade = NULL;
p->totalCidades = 0;
p->proximoEstado = NULL;
if (topoEstados == NULL) {
topoEstados = p;
} else {
tipoEstado aux = topoEstados;
while (aux->proximoEstado != NULL) {
aux = aux->proximoEstado;
}
aux->proximoEstado = p;
}
return p;
} else {
return NULL;
}
}


bool lerCidade(tipoEstado estado) {
bool adicionou = false;
tipoCidade cidade;
char leitura[30];
printf("Cidade: ");
gets(leitura);
if (strlen(leitura)>0) {
adicionou = true;
cidade = (tipoCidade)malloc(sizeof(tipoCidade));
strcpy(cidade->cidade,leitura);
cidade->anterior = estado->topoCidade;
estado->topoCidade = cidade;
estado->totalCidades++;
}
return adicionou;
}

void relatorio() {
system("cls");
tipoEstado estado = topoEstados;
tipoCidade cidade;
while (estado != NULL) {
printf("\n%s",estado->estado);
cidade = estado->topoCidade;
while (cidade != NULL) {
printf(cidade->cidade);
cidade = cidade->anterior;
}
estado = estado->proximoEstado;
}
printf("\nfinalizou");
getchar();
}

int main() {
system("cls");
topoEstados = NULL;
tipoEstado p = lerEstado();
while (p != NULL) {
while (lerCidade(p));
p = lerEstado();
}
relatorio();
return 0;
}

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

while (lerCidade(p));

você n esta passando o argumento omo referencia, ou seja, você teria que passar o endereço de P para que as medidas tomadas na sua funçao promovam mudanças em PO. Fora isso, da uma olhada nos eu malloc q me parece que a sintaxe dele ali esta errada...

Link para o comentário
Compartilhar em outros sites

Arquivado

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

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