Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em programa C


Wizard82

Pergunta

Boa noite!

Tenho que carregar uma struct com alguns dados sobre cidades, porém não está funcionando...

Antes de dar prosseguimento com o programa queria pelo menos imprimir na tela o valor das structs

Se alguém puder dar uma mão...

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct dadosCid 
{ 
char nomeCid [35];
dadosCid *adj[4];
int numCid,ligs;
} cidade[7];

void atribui (void)
{
dadosCid cidade[7];

cidade[0].nomeCid="são Leopoldo";
cidade[1].nomeCid="Novo Hamburgo";
cidade[2].nomeCid="Estancia Velha";
cidade[3].nomeCid="Ivoti";
cidade[4].nomeCid="Dois Irmaos";
cidade[5].nomeCid="Campo Bom";
cidade[6].nomeCid="Sapiranga";
// cidade São leopoldo

cidade[0].adj[0]=&cidade[1]; 
cidade[0].adj[1]=&cidade[5]; 
cidade[0].adj[2]=malloc(sizeof(dadosCid)); 
cidade[0].adj[3]=malloc(sizeof(dadosCid)); 
cidade[0].num=1; // numero da cidade 
cidade[0].lig=2; // quantidade de ligações com outras cidades

// novo hamburgo

cidade[1].adj[0]=&cidade[0]; 
cidade[1].adj[1]=&cidade[2]; 
cidade[1].adj[2]=&cidade[3]; 
cidade[1].adj[3]=&cidade[5]; 
cidade[1].num=2; 
cidade[1].ligs=4;

// estancia velha 
cidade[2].adj[0]=&cidade[1]; 
cidade[2].adj[1]=&cidade[3]; 
cidade[2].adj[2]= malloc(sizeof(dadosCid)); 
cidade[2].adj[3]= malloc(sizeof(dadosCid)); 
cidade[2].num=3; 
cidade[2].ligs=2; 
// ivoti
cidade[3].adj[0]=&cidade[1]; 
cidade[3].adj[1]=&cidade[2]; 
cidade[3].adj[2]=&cidade[4]; 
cidade[3].adj[3]= malloc(sizeof(dadosCid)); 
cidade[3].num=4;
cidade[3].ligs=3; 

// dois irmãos 
cidade[4].adj[0]=&cidade[3]; 
cidade[4].adj[1]=&cidade[5]; 
cidade[4].adj[2]=&cidade[6]; 
cidade[4].adj[3]=malloc(sizeof(dadosCid)); 
cidade[4].num=5; 
cidade[4].ligs=3;


// campo bom 
cidade[5].adj[0]=&cidade[0]; 
cidade[5].adj[1]=&cidade[1]; 
cidade[5].adj[2]=&cidade[4]; 
cidade[5].adj[3]=&cidade[6]; 
cidade[5].num=6; 
cidade[5].ligs=; 
// sapiranga
cidade[6].adj[0]=&cidade[4]; 
cidade[6].adj[1]=&cidade[5]; 
cidade[6].adj[2]=malloc(sizeof(dadosCid)); 
cidade[6].adj[3]=malloc(sizeof(dadosCid)); 
cidade[6].num=7; 
cidade[6].ligs=2;

return(1);

}


void main ()
{
int i;
atribui();
for(i=0;i<6;i++)
{
printf(cidade[i].nomeCid);
printf("/n");

 }

}

O caso é o seguinte: criar uma relação de cidades, em que o usuário defina uma cidade de origem e uma de destino e o program informe se há ligação entre as cidades e os caminhos a percorrer.

Erros: (não sei o significado, se alguém puder me dizer, agradeço)

da linha 17 a 23:

Lvalue required in function atribui()

linha 29 :

cannot assign 'void near*' to 'dadosCid near*' in function atribui()

linha 31, 32

num/ lig is not member of 'dadosCid' in function atribui()

Bom, não copiei todos, da muito trabalho...rs

Só quero dicas e sugestões do que pode estar acontecendo, não quero que montem o código pra mim (damos a vara, não o peixe...hehe)

Abraços!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Visualmente, dá pra perceber diversos erros.

1) Logo de cara dá pra perceber um erro na atribuição dos nomes das cidades aos elementos do vetor. Você faz atribuição direta, o que não é permitido. Para atribuir uma string à uma variável char, você deve fazer uso da função strcpy(). Veja o help desta função. E acrescente o cabeçalho "string.h".

2) Em atribui() você tem um retorno, mas esta função deve retornar void, conforme diz seu protótipo.

3) Todos as chamadas de malloc() contém erro. Note que malloc() retorna um ponteiro para void, mas você precisa atribuir à variável um ponteiro para "dadosCid".

4) A estrutura dadosCid tem um elemento chamado numCid, mas você está em vários lugares errou o nome. Usou "num". Distração sua.

5) Na cidade "Campo Bom" o elemento "ligs" não tem atribuição alguma. Você esqueceu dele.

Acho que é só. :)

Editado por Maligno
Link para o comentário
Compartilhar em outros sites

  • 0
Visualmente, dá pra perceber diversos erros.

1) Logo de cara dá pra perceber um erro na atribuição dos nomes das cidades aos elementos do vetor. Você faz atribuição direta, o que não é permitido. Para atribuir uma string à uma variável char, você deve fazer uso da função strcpy(). Veja o help desta função. E acrescente o cabeçalho "string.h".

2) Em atribui() você tem um retorno, mas esta função deve retornar void, conforme diz seu protótipo.

3) Todos as chamadas de malloc() contém erro. Note que malloc() retorna um ponteiro para void, mas você precisa atribuir à variável um ponteiro para "dadosCid".

4) A estrutura dadosCid tem um elemento chamado numCid, mas você está em vários lugares errou o nome. Usou "num". Distração sua.

5) Na cidade "Campo Bom" o elemento "ligs" não tem atribuição alguma. Você esqueceu dele.

Acho que é só. :)

Bem, comentando e pedindo mais ajuda...

1 - Eu realmente atribui direto, mas achei que se pudesse fazer isso. Não sei mesmo como usar essa função "strcpy()". Esse help que você sugere, é dentro do próprio compilador? Não pode me dar a dica de como fazer?

2 - Aquele retorno eu coloquei depois, porque o compilador dizia que precisava haver um retorno... depois, eu tinha mudado para "int" o retorno da função e mesmo assim não funcionou. Daí, tirei o "int" e voltei pro "void"... só que esqueci de apagar o retorno embaixo... erro meu.

3 - Eu nunca usei o malloc, e tentei usar pelo que li nas apostilas. No caso, eu estava (ou tentando) alocar uma área de memória vazia só para o ponteiro apontar para algum lugar e ser inicializado. Pelo que eu entendi, a gente determina isso chamando a função, e informando o tamanho (sizeof) e o tamanho de memória usado (no caso, o tamanho do mesmo tipo que eu mesmo criei).

4 - Sim, erro de distração. Esses são os que eu mais adoro. hehehe

5 - Distração também. :P

O que é mais complicado mesmo, é você ler uma coisa, e achar que é uma coisa e é outra. Sempre me preocupo para não haver erros de lógica... erros de distração e falta de prática na linguagem atrapalham, mas são superávies.

Peço então, mais um ajudinha nesse tópico. Irei refazer e postar aqui novamente o novo código, mas preciso de uma ajuda em como usar "malloc" e "strcpy".

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0

Ok. Não é coisa difícil. Seguindo os ítens:

1) O protótipo de strcpy() é char *strcpy(char *target, char *source). No seu caso, para a primeira atribuição será strcpy("São Leopoldo",cidade[0].nomeCid).

3) O protótipo de malloc() é void *malloc(size_t size). No seu caso, você precisa forçar um cast para o tipo que será armazenado na memória alocada. Então, você deve usar (dadosCid *)malloc(sizeof(dadosCid)). Uma informação adicional: o tipo size_t é traduzido para unsigned int pelo header "stddef.h", padrão em qualquer compilador, que o inclui automaticamente.

Editado por Maligno
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...