Enviado em 29/12/2007 - 17:34h
Legal que não é exercício! Eu falei isso pois muita gente reclama que C é ruim mas não tem vontade de aprender e não faz o mínimo esforço para isso... Que bom que você está tentando! :-)
Eu não entendi exatamente o que você quis dizer mas vou explicar melhor as partes que você comentou.
Primeiro: a função scanf recebe como parâmetro a string de formato e depois o endereço de memória onde o valor digitado será salvo. Normalmente o valor deve ser salvo em uma variável então utilizamos o & para passar o endereço desta variável. Este & serve justamente para isso: receber o endereço de memória de uma variável.
Porém existem casos em que a própria variável já contém o endereço de memória e portanto o & não deve ser usado: no caso de vetores onde não é colocado o índice e para ponteiros.
Ponteiros são uma variável como outra qualquer. A única diferença é que, ao invés de armazenar um número (como no caso de um int ou float) ou um caracter (como no caso do char), esta variável armazena um endereço de memória. Assim, se ele armazena um endereço de memória, não precisamos do & ao passar um ponteiro para o scanf pois senão cairá no caso do "endereço do endereço"...
Quanto a omitir algumas partes, pelo que eu entendi você está dizendo que colocar o struct casa em todo lugar confunde, é isso? Se for, não tem jeito! Pois primeiro você tem que criar a estrutura, depois é o parâmetro da função e portanto você tem que falar o que a função recebe. Depois, na função main, você tem que criar a variável e para isso tem que dizer qual o seu tipo, ou seja, o que ela irá armazenar.
Se você usar apenas casa[x].cor vai dar erro. O que poderia ser feito é o seguinte: ao criar uma estrutura colocamos o ; no final, correto? Pois antes de colocar este ; você pode criar uma variável desta estrutura. Depois essa variável poderia ser utilizada em todo lugar. Porém esta seria uma variável global e isto não deve ser generalizado pois gera muitos problemas quanto a quantidade de memória utilizada, dificuldade para programação e manutenção de programas, etc. Mas é uma alternativa e no seu caso, por ser um programa pequeno, poderia ser utilizado! Mais uma coisa: se você não quiser criar novas variáveis desta estrutura, nem nome precisa dar a ela. Assim a declaração da estrutura seria:
struct {
char cor[20];
} casa[10];
A sua função ficaria:
void cadastro() {
E na função main não teria que criar nenhuma variável.
Outra coisa: criar apenas um ponteiro para a sua struct como no comando que você passou:
struct casa *enter;
não servirá para você. Pois, como o próprio nome diz, você criou apenas um ponteiro, ou seja, uma variável que aponta para uma outra variável que já deverá existir. Se você apenas criar o ponteiro como na linha acima e passá-lo para a função irá gerar o erro de falha de segmentação.
Qualquer outra dúvida é só falar!