Logo Hardware.com.br
Interliche
Interliche Novo Membro Registrado
1 Mensagem 0 Curtidas

Erro programa em C++ -- Vetor de struct passado por referencia

#1 Por Interliche 01/12/2015 - 23:58
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#define[/HASHTAG] TOTAL 100

struct cliente{
char Nome[TOTAL],Rua[TOTAL],Bairro[TOTAL],Cidade[TOTAL];
int tel,CEP,Idade;
};

typedef struct cliente cliente;

void cadastro(cliente *cadastro){
printf("\nDigite o nome do cliente: ");
gets(cadastro->Nome);
printf("\nDigite a idade do cliente: ");
scanf("%d",cadastro->Idade);
printf("\nDigite a rua do cliente: ");
gets(cadastro->Rua);
printf("\nBairro: ");
gets(cadastro->Bairro);
printf("\nCidade: ");
gets(cadastro->Cidade);
printf("\nTelefone: ");
scanf("%d",cadastro->tel);
printf("\nCEP: ");
scanf("%d",cadastro->CEP);
}

void exibir(cliente* exib[],int N){
int i;
for(i=0;i printf("\n\n");
puts(exib->Nome);
printf("\nTelefone: %d",exib->tel);
printf("\nIdade: %d",exib->Idade);
}
}

void buscar(cliente* exibir[],int N){
char nom[TOTAL];
int i;

printf("\nDigite o nome que deseja buscar: ");
gets(nom);

for(i=0;i if(stricmp(nom, exibir->Nome)==0){
puts(exibir->Nome);
printf("\nTelefone: %d",exibir->tel);
printf("\nIdade: %d",exibir->Idade);
puts(exibir->Rua);
puts(exibir->Bairro);
printf("CEP: %d",exibir->CEP);
puts(exibir->Cidade);
}
}

}

main(){
int op,MAX,cont=0;
cliente clientes[TOTAL];

printf("Qual o total de clientes a serem cadastrados: ");
scanf("%d",&MAX);
while(op!=0){
printf("<1>Cadastrar cliente\n<2>Consultar Nome\n<3>Listar Todos\n<4>Sair\n");
scanf("%d",&op);
if(op==4){
break;}
switch(op){
case 1:
if(cont==MAX){
printf("NUMERO MAXIMO DE REGISTROS ATINGIDO!");
}else{
cadastro(clientes);
cont++;
}
break;
case 2:
buscar(clientes,MAX);
break;
case 3:
exibir(clientes,MAX);
break;
}
}

getch();
}



Abaixo os erros que aparecem no compilador:

[Error] cannot convert 'cliente*' to 'cliente**' for argument '1' to 'void buscar(cliente**, int)'
[Error] cannot convert 'cliente*' to 'cliente**' for argument '1' to 'void exibir(cliente**, int)'
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
02/12/2015 - 02:53
O motivo destes erros é que o 'tipo' no destino é incompatível. O 'casting' intrínseco não acontece.

Segue o seu código funcional,
com algumas observações para você acompanhar:
[code=c]
#include
//#include ==> Com as devidas correções, este não é necessário.
#include
#include
#define TOTAL 100

struct cliente{
char Nome[TOTAL],Rua[TOTAL],Bairro[TOTAL],Cidade[TOTAL];
int tel,CEP,Idade;
};

typedef struct cliente cliente;

void cadastro(cliente *cadastro){
printf("\nDigite o nome do cliente: ");
scanf(" %s",cadastro->Nome); // 'gets' é inseguro e obsoleto. Melhor evitar.
printf("Digite a idade do cliente: "); // 'scanf' sempre introduz quebra : '\n' é desnecessário
scanf(" %i",&cadastro->Idade);
printf("Digite a rua do cliente: ");
scanf(" %s",cadastro->Rua);
printf("Bairro: ");
scanf(" %s",cadastro->Bairro);
printf("Cidade: ");
scanf(" %s",cadastro->Cidade);
printf("Telefone: ");
scanf(" %i",&cadastro->tel);
printf("CEP: ");
scanf(" %i",&cadastro->CEP);
}

void exibir(cliente* exib, int N){ // Aqui estava o problema. (struct não é Array)
int i;
for(i=0;i printf("\n\n");
puts(exib[i].Nome); // Para exibicao usa-se '.' ao invés de '->'
printf("Telefone: %d\n",exib[i].tel);
printf("Idade: %d\n",exib[i].Idade);
}
}

void buscar(cliente* exibir,int N){ // Aqui estava o problema. (struct não é Array)
char nom[TOTAL];
int i;

printf("\nDigite o nome que deseja buscar: ");
scanf("%s",nom); // Evite usar 'gets'

for(i=0;i if(strcmp(nom, exibir[i].Nome)==0){ // Não existe 'stricmp'
puts(exibir[i].Nome);
printf("Telefone: %i\n",exibir[i].tel);
printf("Idade: %i\n",exibir[i].Idade);
printf("Rua: %s\n",exibir[i].Rua);
printf("Bairro: %s\n",exibir[i].Bairro);
printf("CEP: %i - ",exibir[i].CEP);
puts(exibir[i].Cidade);
}
}
}

int main() { // 'main' exige 'return': Não custa usar.
int op=5,MAX,cont=0;
cliente clientes[TOTAL];

printf("Qual o total de clientes a serem cadastrados: ");
scanf("%d",&MAX);
while(op!=0){
printf("\n\n<1> Cadastrar cliente\n<2> Consultar Nome\n<3> Listar Todos\n<4> Sair\n");
scanf("%d",&op);
if(op==4) {
break;
}
switch(op) {
case 1:
if(cont==MAX){
printf("NUMERO MAXIMO DE REGISTROS ATINGIDO!");
} else {
cadastro(clientes);
cont++;
}
break;
case 2:
buscar(clientes,MAX);
break;
case 3:
exibir(clientes,MAX);
break;
}
}

getchar();
puts("Pressione para sair.");
getchar();

return 0;
}[/code]
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal