Olá, estrou trabalhando em um algoritmo que simula uma agência de venda de carros, defini uma struct que representa o cadastro de uma pessoa, uma struct para o cadastro de um carro e funções para efetuar esses cadastros. Agora, estou tentando fazer uma função para consultar os carros cadastrados por suas respectivas placas; para comparar as placas dos carros cadastrados com a placa que o usuário fornece estou usando a função strcmp, porém, ela (a função strcmp) me retorna o valor '97', independente de quais sejam as strings usadas em seus parâmetros. Alguém pode me dar uma luz sobre o que deve ser corrigido? Segue o código:
#include <stdio.h>
#include <string.h>
typedef struct data { // struct DATA.
int dia ;
int mes;
int ano;
} Data;
typedef struct pessoa { // struct PESSOA.
char nome[50];
char cpf[15];
Data dtNasc;
} Pessoa;
typedef struct carro { // struct CARRO.
Pessoa dono;
char placa[10];
char modelo[25];
int anoFabricacao;
float preco;
} Carro;
int validarPlaca(char placa[]) {
int I,
cont = 0;
for(I=0; I<3; I++) { // verifica se os 3 primeiros caracteres são letras.
if ((placa[I] >= 'A' && placa[I] <= 'Z') || (placa[I] >= 'a' && placa[I] <= 'z')) {
cont++;
}
}
if (placa[3] == '-') { // verifica se o quarto caractere da string é um hífen.
cont++;
}
for(I=4; I<8; I++) { // verifica se os 4 últimos caracteres são números.
if(placa[I] >= 48 && placa[I] <= 57) {
cont++;
}
}
if (cont == 8) { // a variavel "cont", representa o número de caracteres que estão de acordo com uma "placa de carro".
return 1;
} else {
return 0;
}
}
Carro cadastrarCarro() {
Carro C;
char DONO[50],
aux[10];
int VALIDA;
printf("Dono..: ");
fgets(C.dono.nome,50,stdin);
printf("Placa..: ");
do { // verifica se a placa é válida.
fgets(aux,10,stdin);
VALIDA = validarPlaca(aux);
} while (VALIDA == 0);
strcpy(C.placa, aux);
printf("Modelo..:");
fgets(C.modelo,25,stdin);
printf("Ano de fabricação..:");
scanf("%d", &C.anoFabricacao);
__fpurge(stdin);
printf("Preço..:");
scanf("%f", &C.preco);
__fpurge(stdin);
return C;
}
void consultarPlaca() {
int valida, I;
char PLACA[10];
Carro C[1000];
printf("Digite a placa que deseja consultar..:");
do { // do - while para verificar se a placa é válida.
fgets(PLACA, 10, stdin);
valida = validarPlaca(PLACA);
} while (valida == 0);
for(I=0; I<1000; I++) { // for para verificar a placa de cada carro cadastrado um por um.
if (strcmp(PLACA, C[I].placa) == 0) { // este é o strcmp que só retorna 97.
printf("----------\nDONO..: ");
puts(C[I].dono.nome);
printf("PLACA..: ");
puts(C[I].placa);
printf("MODELO..: ");
puts(C[I].modelo);
printf("ANO DE FABRICAÇÃO..: %d\n", C[I].anoFabricacao);
printf("PREÇO..: %f\n----------\n", C[I].preco);
}
}
}
int main() { Pessoa vet[10]; Carro carro[10]; char placa[10]; int posAtual = 0, valor, I;
for(I=0; I<3; I++) { // faz o cadastro de 3 carros apenas para fim de testes.
carro[I] = cadastrarCarro();
}
consultarPlaca();
return 0;
}