Ir ao conteúdo

undeclared (first use in this function)


Marcelo_Jq.

Posts recomendados

Postado

Oi, estou aprendendo a desenvolver em C e estou com o seguinte situação que não consigo resolver, segue codigo em DevC ++:


#include<conio.h>
#include<stdlib.h>
#include<stdio.h>

struct cadastro
{
char nome [50];
char chassi[30];
char modelo[30];
char marca[12];
char cor[15];
char combustivel[12];
char placa[10];
char ano[10];
};
void leitura(cadastro vet_car[3])
{
int i;
printf("Cadastro de Veiculos :");
for (i=0;i<=2;i++)
{
fflush(stdin);//limpa a cache da ultimo cadastro
printf("Nome do proprietario :\t\n");
scanf("%s",& vet_car[i].nome);
printf("Chassi do veiculo :\t\n");
scanf("%s",& vet_car[i].chassi);
printf("Modelo do veiculo :\t\n");
scanf("%s",& vet_car[i].modelo);
printf("Marca do do veiculo :\t\n");
scanf("%s",& vet_car[i].marca);
printf("Cor do veiculo :\t\n");
scanf("%s",& vet_car[i].cor);
printf("Combustivel do veiculo :\t\n");
scanf("%s",& vet_car[i].combustivel);
printf("Placa do veiculo :\t\n");
scanf("%s",& vet_car[i].placa);
printf("Ano do veiculo :\t\n");
scanf("%s",& vet_car[i].ano);

}//final do laço for
getch();
}
void exibe (cadastro vet_car[3])
{
int i;
for(i=0;i<=2;i++)
{
printf("\n Nome do proprietario :\t%s",vet_car[i].nome);
}
}
int main()
{
cadastro vet_car[3];
leitura (vet);
exibe(vet);
}

O que esta errado?

Postado

Está dando erro pois quando você declara uma struct da seguinte maneira:


struct cadastro {
...
};

A forma correta de declarar uma variável desse tipo é dessa maneira:


struct cadastro nomeDaVariavel;

// Ao invés de
cadastro nomeDaVariavel;

Se você quiser usar apenas cadastro para declarar as variáveis (ao invés de struct cadastro) você deve definir a estrutura da seguinte maneira:


typedef struct {
...
} cadastro;

Outra coisa, na função main você está referenciando uma variável chamada vet que não foi declarada, isso também causará um erro de compilação.

Espero ter ajudado.

Postado

dei uma olhada, e resolvi o erro.



#include<conio.h>
#include<stdlib.h>
#include<stdio.h>

typedef struct cadastro
{
char nome [50];
char chassi[30];
char modelo[30];
char marca[12];
char cor[15];
char combustivel[12];
char placa[10];
char ano[10];
} CAD;
void leitura(CAD vet_car[3])
{
int i;
printf("Cadastro de Veiculos :");
for (i=0;i<=2;i++)
{
fflush(stdin);//limpa a cache da ultimo cadastro
printf("Nome do proprietario :\t\n");
scanf("%s",& vet_car[i].nome);
printf("Chassi do veiculo :\t\n");
scanf("%s",& vet_car[i].chassi);
printf("Modelo do veiculo :\t\n");
scanf("%s",& vet_car[i].modelo);
printf("Marca do do veiculo :\t\n");
scanf("%s",& vet_car[i].marca);
printf("Cor do veiculo :\t\n");
scanf("%s",& vet_car[i].cor);
printf("Combustivel do veiculo :\t\n");
scanf("%s",& vet_car[i].combustivel);
printf("Placa do veiculo :\t\n");
scanf("%s",& vet_car[i].placa);
printf("Ano do veiculo :\t\n");
scanf("%s",& vet_car[i].ano);

}//final do laço for
getch();
}
void exibe (CAD vet_car[3])
{
int i;
for(i=0;i<=2;i++)
{
printf("\n Nome do proprietario :\t%s",vet_car[i].nome);
}
getch();
}
int main()
{
CAD vet_car[3];
leitura (vet_car);
exibe(vet_car);
}

faltou você definir o nome do objeto (struct) eo typedef

typedef struct ....

{

variavel

...

} (FALTOU AQUI);

e no main.

declarar ela.

agora pode rodar que esta tudo certo.

Postado
Ainda tem um erro Sylerr, do jeito que está o nome do proprietário não pode ter sobrenome,

pois o código pula direto para o modelo do veículo, não é uma boa prática usar o scanf nestes casos:


printf("Nome do proprietario :\t\n");
scanf("%s",& vet_car[i].nome);

O mais correto é usar:



printf("Nome do proprietario :\t\n");
gets(vet_car[i].nome);

Sabemos que o scanf não reconhece o que vem pela frente depois de um espaço, falou?

ABRAÇOS

A função scanf é capaz de ler strings com espaço. Não é recomendável a utilização da função gets para leitura de strings, pois a mesma não respeita o tamanho do array de caracteres passado para ela como parâmetro, podendo então acessar áreas de memória indevidas.

Pode-se ler mais sobre isso aqui.

Para utilizar a função scanf para ler strings com espaço, basta utilizá-la da seguinte maneira:


char str[50];

// 49 é a quantidade de caracteres a serem lidos, pode ser substituido
// pela quantidade necessária dependendo do tamanho do vetor utilizado
scanf("%49[^\n]", str);

Espero ter ajudado.

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!