Guest Luckxander Postado Outubro 30, 2006 Denunciar Share Postado Outubro 30, 2006 Estou tentando comparar duas strings mas no final só registra como print=1; e informa que a placa não foi encontrada. Alguém sabe me dizer o que tem de errado nesse bloco lógico ?(usei as bibliotecas stdio,stdlib,iostream,conio e string.h)comparador=1; cout<<"\nSAIDA DE VEICULO"; cout<<"\nInforme a placa(xxx-yyyy): "; gets(novaplaca); //obtem a placa para verificaçao for(i=0; i<contador; i++){ comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0) if(comparador==0){ print=0;//registra que encontrou a placa break; //interrompe a busca } else{ print=1; //registra que não achou a placa } p++; //incrementa o ponteiro dentro do for } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenatoMejias Postado Outubro 30, 2006 Denunciar Share Postado Outubro 30, 2006 O erro está nessa linha:comparador=strcmpi(novaplaca,p->placa);o comando certo é strcmp Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Luckxander Postado Outubro 31, 2006 Denunciar Share Postado Outubro 31, 2006 testei com strmcp também, não deu.o strcmpi não é case sensitive, mas qualquer um dos dois deveria dar.Se eu postar o código todo aqui, ajuda ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenatoMejias Postado Outubro 31, 2006 Denunciar Share Postado Outubro 31, 2006 Ajudaria bastante. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Luckxander Postado Outubro 31, 2006 Denunciar Share Postado Outubro 31, 2006 Abaixo vai o código completo, é só copiar e colar que tá rodando certinho, o único problema é que não está achando a placa do carro para fazer retirada do estacionamento.#include <iostream.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <time.h> //estrutura para cadastrar o carro struct dados{ double hora,hora2,minuto,minuto2; char placa[8]; char data[10]; double valorfracao; };void main(){ int nvagas,contador,opcao; char novaplaca[8]; int i,print,msg,comparador; double tempo1,tempo2,tempototal,valor; dados *p; //declara o ponteiro da estrutura dados p=(dados*)malloc(sizeof(dados));//aloca dinamicamente memoria para o ponteiro cout<<"ESTACIONAMENTO UNATEC"; //relogio para simples ilustraçao - biblioteca time.h time_t timer;//define a estrutura de conversao de tempo struct tm *tblock; //declara a estrutura timer = time(NULL); //obtem a hora do sistema tblock = localtime(&timer);//converte a hora em estrutura (tblock) cout<<"\n"<<asctime(tblock); //exibe a hora cout<<"\nInforme a quantidade de vagas disponiveis: "; cin>>nvagas; cout<<"\nInforme o preço da fraçao: "; cin>>p->valorfracao; contador=0; //inicializa as vagas ocupadas msg=0; //aciona o while while (msg==0){ //inicia o loop de exibiçao cout<<"\n\nVagas disponiveis: "<<nvagas; //exibe o numero de vagas disponiveis cout<<"\nVagas ocupadas: "<<contador; //exibe o numero de vagas ocupadas cout<<"\n\nInforme a opcao\n"; //exibe o menu cout<<"0-Fechar \n"; //opçao do menu cout<<"1-Entrada de veiculos \n"; //opçao do menu cout<<"2-Saida de veiculos \n"; //opçao do menu cin>>opcao; //registra a opçao escolhida switch(opcao){ //cria o menu case 0 : {cout<<"\nPrograma encerrado"; //case 0 - processa a primeira opçao do menu msg=1; //sai do loop while free(p); //libera a memoria alocada break;} //encerra a instruçao case 1 : { if (nvagas == 0){ //case 1 - processa a segunda opçao do menu clrscr(); cout<<"\nESTACIONAMENTO LOTADO"; break; //encerra a instruçao } else{ clrscr(); cout<<"\nENTRADA DE VEICULO"; cout<<"\nInforme a placa(xxx-yyyy): "; gets(p->placa); cout<<"\nInforme a Data(xx/xx/xxxx): "; gets(p->data); cout<<"\nInforme a Hora(00 a 24): "; cin>>p->hora; cout<<"\nInforme os Minutos(00 a 59): "; cin>>p->minuto; nvagas=nvagas-1; //atualiza a quantidade de vagas disponiveis contador=contador+1; //atualiza a quantidade de vagas ocupadas clrscr(); cout<<"\nVEICULO CADASTRADO"; break; //exibe a mensagem e encerra a instruçao } } case 2 : { if(contador==0){ //case 2 - processa a terceira opçao do menu clrscr(); cout<<"\nESTACIONAMENTO VAZIO"; break; //exibe a mensagem e encerra a instruçao } else{ clrscr(); comparador=1; cout<<"\nSAIDA DE VEICULO"; cout<<"\nInforme a placa(xxx-yyyy): "; gets(novaplaca); //obtem a placa para verificaçao for(i=0; i<contador; i++){ comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0) if(comparador==0){ print=0;//registra que encontrou a placa break; //interrompe a busca } else{ print=1; //registra que não achou a placa } p++; //incrementa o ponteiro dentro do for } if(print==1){ for(i=0; i<contador; i++){ p--; //volta as posiçoes do ponteiro para o inicio } cout<<"\nVEICULO não ENCONTRADO"; break; } if(print==0){ cout<<"\nInforme a hora(00 a 24): "; cin>>p->hora2; //recebe a hora de saida cout<<"\nInforme os minutos(00 a 59): "; cin>>p->minuto2; //recebe os minutos de saida clrscr(); cout<<"\nSAIDA DE VEICULO"; cout<<"\nPlaca: "<<p->placa; cout<<"\nHora de entrada: "<<p->hora<<":"<<p->minuto; cout<<"\nHora de saida: "<<p->hora2<<":"<<p->minuto2; tempo1=((p->hora2*60)-(p->hora*60)); //convertendo hora em minutos tempo2=((p->minuto2)-(p->minuto)); tempototal=tempo1+tempo2; //calcula o tempo total em minutos cout<<"\nTempo de parmanencia: "<<tempototal<<" minutos"; valor=((tempototal/15)*p->valorfracao); //calcula o preço total cout<<"\nPreço da fraçao: "<<p->valorfracao; cout<<"\nTotal a pagar: "<<valor; nvagas=nvagas+1; //atualiza a quantidade de vagas disponiveis contador=contador-1; //atualiza a quantidade de vagas ocupadas } } break;} //encerra a instruçao } } getch(); //obtem comandos de exibiçao de tela} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Decio Postado Outubro 31, 2006 Denunciar Share Postado Outubro 31, 2006 Tenta simplesmente comparar as duas strings sem o laço for:comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0)if(comparador==0) print=0;//registra que encontrou a placaelse print=1; //registra que não achou a placa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Luckxander Postado Outubro 31, 2006 Denunciar Share Postado Outubro 31, 2006 testei sem o for e não adiantou, continuou exibindo a mensagem "veiculo não encontrado" Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenatoMejias Postado Outubro 31, 2006 Denunciar Share Postado Outubro 31, 2006 Uma vez tive que fazer um programa semelhante, veja o código que usei para fazer uma busca: pesquisar() { NOME dados[10]; char nome[100]; int i; clrscr(); if (cont==1) // a primeira vez, então não tem registros gravados { cout<<"Nenhum registro gravado!!!\a"; cont=0; getch(); return(0); } cout<<"Informe o nome da pessoa a ser consultado: "; gets(nome); for(i=0;i<10;i++) if (strcmp(nome,dados[i].nome)==0) //Você tem que digitar o nome EXATAMENTE igual { cout<<"Nome: "<<dados[i].nome<<"\n"; cout<<"Endereço: "<<dados[i].end<<"\n"; cout<<"Telefone: "<<dados[i].tel; getch(); break; } if(strcmp(nome,dados[i].nome)!=0) //Se o nome NÃO foi digitado EXTAMENTE igual { cout<<"NOME INVALIDO!!!\a"; getch(); } return(0); } Veja se te ajuda e tenta adptar no seu código. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Novembro 1, 2006 Denunciar Share Postado Novembro 1, 2006 ontem eu testei rapidamente seu código, não deu pra ver tudo, mas da um print nas duas variáveis que voce precisa comparar antes de usar o comando strcmp, voce vai ver que mesmo digitando a mesma placa elas não serão iguais . . . cout<<"\nInforme a placa(xxx-yyyy): "; gets(novaplaca); //obtem a placa para verificaçao printf("digitou: %s armazenado: %s\n",novaplaca, p->placa); for(i=0; i<contador; i++){ comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0) . . . Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Luckxander Postado Novembro 1, 2006 Denunciar Share Postado Novembro 1, 2006 descobri um detalhe:se eu digitar a placa sem hífem e espaço ela funciona.Ou seja, ao invés de xxx-yyyy eu digito xxxyyyy.Será porque o hífem não é reconhecido como string ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest - Paulo - Postado Novembro 1, 2006 Denunciar Share Postado Novembro 1, 2006 Cara, isso tem have com a tabela ASCII, quando o compilador faz a conversão para número binário. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Novembro 1, 2006 Denunciar Share Postado Novembro 1, 2006 descobri um detalhe:se eu digitar a placa sem hífem e espaço ela funciona.Ou seja, ao invés de xxx-yyyy eu digito xxxyyyy.Será porque o hífem não é reconhecido como string ?o hífen é um caracter, veja só uma coisa na declaracão de sua estrutura char placa[8];contando com o hifen voce tem 8 caracteres, mas voce se esquece que uma string é finalizada com '\0', então precisa de mais um na declaracão.outra coisa é a funcao gets, ela não é recomendada já que não checa estouro de buffer, voce pode usar a funcão fgets para substitui-la. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Luckxander Postado Novembro 1, 2006 Denunciar Share Postado Novembro 1, 2006 vou tentar usando fgets Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Luckxander
Estou tentando comparar duas strings mas no final só registra como print=1; e informa que a placa não foi encontrada.
Alguém sabe me dizer o que tem de errado nesse bloco lógico ?
(usei as bibliotecas stdio,stdlib,iostream,conio e string.h)
comparador=1;
cout<<"\nSAIDA DE VEICULO";
cout<<"\nInforme a placa(xxx-yyyy): ";
gets(novaplaca); //obtem a placa para verificaçao
for(i=0; i<contador; i++){
comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0)
if(comparador==0){
print=0;//registra que encontrou a placa
break; //interrompe a busca
}
else{
print=1; //registra que não achou a placa
}
p++; //incrementa o ponteiro dentro do for
}
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.