Jump to content

Comparar campo de struct com string


Go to solution Solved by bsccara,

Recommended Posts

Posted (edited)

Boas noites ,

A minha questão é a seguinte , eu estou a fazer um trabalho para o curso e consiste em desenvolver um software para um stand de carros.só que estou com um problema .Eu quero que apos a introdução de um nome seja impresso no ecrã o nome do cliente , mas no entanto apos eu introduzir um nome ele volta para o menu anterior.Aqui fica a struct que guarda os dados tal como as funções que trabalham com ela.Eu penso que seja um problema na altura de fazer a comparação , mas como não tenho muita experiencia com structs e strings em C não sei o que possa ser

typedef struct{
char nome[50];
int num_ident;
int nif;
char morada[200];
int tel;
}CLIENTE;


typedef CLIENTE VECTCLI[MAX];


CLIENTE insertCli(void){
CLIENTE info;
printf("Insira o nome do cliente:");
scanf("%s", info.nome);
printf("Introduza o número do cartao de cidadão/BI:");
scanf("%d", &info.num_ident);
printf("Introduza o NIF do cliente");
scanf("%d", &info.nif);
printf("Introduza a morado do cliente:");
scanf("%s", info.morada);
printf("Introduza o telefone/telemovel do cliente:");
scanf("%d", &info.tel);
return(info);
}
//funcao auxiliar para correr o vector de clientes
void listCli(CLIENTE client_info){
printf("Nome do Cliente: %s", client_info.nome);
printf("Morada do Cliente: %s", client_info.morada);
printf("Nif do cliente: %d", client_info.nif);
printf("BI do cliente: %d", client_info.num_ident);
printf("Número de telefone do cliente: %d", client_info.tel);
}
//função que vai pesquisar um cliente pelo nome
void showClient(VECTCLI v_clientes, int nclientes , char CliName){
int i, flag;
  for (i=0;i<nclientes;i++){
	fif(v_clientes[i].nome  ==  CliName ){
		printf("As informações sobre o cliente são as seguintes:");
		listCli(v_clientes[i]);
	}else{
		printf("Nome não encontrado!");
	}

  }
}
Edited by pmg
LP adicionada ao GeSHi
  • Solution
Posted

1) O typedef está mal declarado, pois queres que o tipo VECTCLI seja um vector de estruturas CLIENTE de tamanho MAX.

2) A tua utilização de inteiros para receber strings com apenas caracteres numéricos é original... mas se o inteiro não tiver pelo menos 32 bits...

3) A função listCli está à espera de receber uma estrutura CLIENTE passada por cópia na pilha do CPU. Não é recomendável, é preferível passar um ponteiro para ela.

4) A função showClient recebe um caracter como último parâmetro e não uma string.

5) A comparação de strings não é feita com o operador == em C; usa a função strcmp.

Tenta compilar o código antes de o postares aqui; pelo menos os pontos 1 e 5 seriam detectados durante a compilação.

Posted

Relativamente ao ponto 1 e 2 por incrivel que parece aquilo sempre compilou bem.Estou a usar o code::blocks como IDE. Relativamente ao ponto 3 poderia explicar melhor isso se fosse possivl?

Posted

Onde e que chamas a funcao insertCli?

E como? O que esta na linha em que a chamas e nas linhas proximas relevantes?

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Problema resolvido =) tinha problemas no contador para o ciclo for e como referiram o outro problema estava a passar so um char e logo a comparação não iria funcionar.Obrigado pelas dicas pessoal =)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.