Ir para conteúdo
Fórum Script Brasil
  • 0

Posição Do Ponteiro


Guest Luckxander

Pergunta

Guest Luckxander

Pessoal,

estou com o programinha abaixo praticamente pronto, rodando beleza, mas com apenas um pequeno erro.

Se eu registrar duas placas e depois procurar pela primeira, o programa informa que não achou.

Na verdade ele só acha a última placa registrada, ou seja, provavelmente está sobrescrevendo o ponteiro.

Alguém sabe o que deve ser mudado para funcionar ?

#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; //dimensiona o limite maximo de vagas do estacionamento

cout<<"\nInforme o preço da fraçao: ";

cin>>p->valorfracao; //registra o preço cobrado pela fraçao de hora

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(sem hifen e sem espaço): ";

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(sem hifen e sem espaço): ";

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<<"\nData de entrada: "<<p->data;

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: R$"<<p->valorfracao;

cout<<"\nTotal a pagar: R$"<<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

}

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

algumas saidas que voce tem:

criando um vetor de estrutura. Ex:

 struct tm tblock[20]; //declara a estrutura
tome muito cuidado com a indexacão do vetor a desvantagem é o número fixo de estruturas que voce pode armazenar criando um ponteiro para a propria estrutura, fazendo assim uma lista encadeada. Ex:
 //estrutura para cadastrar o carro
struct dados{
     double hora,hora2,minuto,minuto2;
     char placa[8];
     char data[10];
     double valorfracao;
     struct dados *prox;
};

com isso voce não limita o número de estruturas de seu programa.

com essa opcao voce precisa apenas guardar a primeira estrutura que apontará pra segunda que apontará pra terceira e assim por diante.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...