Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
S4ur0N

Variáveis aparentemente pegando lixo

Recommended Posts

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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Encontrei o problema. A passagem de parâmetro está correta, pois o tipo já é um ponteiro. O problema estava no malloc, onde eu alocava espaço pro ponteiro e não pra estrutura.

    cidade = (tipoCidade)malloc(sizeof(regCidade));

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×