structs problem

-2

Good, I developed a parking management program, when people to show on the screen all the cars and their characteristics the brand is printed next to the license plate and I do not know why. Can you help me?

CODE:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

struct Tempo{
   int hora[8];
};

struct registo_veiculo{
    char matricula[6] , marca[10] , modelo[10] , cor[10];
    int  status;
    struct Tempo entrada;

}carro[10];


//Procedimento para limpar o registro do carro que saiu do estacionamento
void excluir(int i)
{

     carro[i].matricula==0;
     carro[i].modelo==0;
     carro[i].marca==0;
     carro[i].cor==0;
     carro[i].entrada.hora==0;
     carro[i].status==0;
}

//Procedimento para inserir dados dos veículos
void inserir(int i)
{
    char placa[6];
   int tam_pla;
   FILE *P;

      printf("Digite a matricula:");
      fflush(stdin);
      scanf("%s",&placa);


      strupr(placa);//deixa caracteres da placa com letra maiúsculo

      strcpy(carro[i].matricula, placa);//copia a informação escrita no vetor placa e transcreve para a estrutura no parâmetro matricula.

      tam_pla=strlen(carro[i].matricula);
      // Testa quantos digitos foram inseridos.
      if(tam_pla!=6)
      {
        if(tam_pla<6)
        {
        printf("\nMatricula invalida\nDigitos insuficientes\n\n");
        inserir(i);
        }
        else//(tam_pla>6)
        {
        printf("\nMatricula invalida\nMuitos digitos\n\n");
        inserir(i);
        }
      }


   printf("\nDigite o modelo:");
   fflush(stdin);
   scanf("%s",carro[i].modelo);

   //deixa string em minúsculo
   strlwr(carro[i].modelo);
   fflush(stdin);

   //deixa primeiro caractere maiúsculo
   carro[i].modelo[0]=toupper(carro[i].modelo[0]);

   printf("\nDigite a marca:");
   fflush(stdin);
   scanf("%s",carro[i].marca);


   //deixa string em minúsculo
   strlwr(carro[i].marca);

   //deixa primeiro caractere maiúsculo
   carro[i].marca[0]=toupper(carro[i].marca[0]);

   printf("\nDigite a cor:");
   fflush(stdin);
   scanf("%s",carro[i].cor);

   //deixa string em minúsculo
   strlwr(carro[i].cor);

   //deixa primeiro caractere maiúsculo
   carro[i].cor[0]=toupper(carro[i].cor[0]);//cor[0] é o 1º caracter que vai ser alterado

   printf("\nDigite a hora da entrada no formato <horas>:<minutos>:(digitar os :)");
   fflush(stdin);
   scanf("%s",carro[i].entrada.hora);

   carro[i].status=1;

   P=fopen("CARRO.txt", "wb");

   if(P==NULL)
   {
    puts("Erro na abertura do ficheiro.");
    exit(0);//termina com sucesso, sem erros
   }
   else
   {
   fwrite(&carro, sizeof(carro), 1, P);
   fclose(P);
}
}

//Procedimento para registar a entrada de veiculos no estacionamento
void registar_veiculo(){
     int i, flag=1;// a flag no inicio tem valor 1, se encontrar um lugar para estacionar, flag=0 senão fla=1;

     for(i=0; i<10; i++)
     {
        if(carro[i].status==0)
        {
        inserir(i);
        printf("\n\nVeiculo registado com sucesso!");
        sleep(2);//espera dois segundos até voltar ao menu
        flag=0;//controla a lógica da função para a poder controlar o espaço no parque de estacionamento
        system("cls");
        break;
        }
     }

     if(flag==1)
     {
     printf("Sem espaco para registar\nEnter voltar ao menu...");
     getch();//obtem o caracter da consola mas não mostra no ecrã;
     system("cls");
     }
}

// Procedimento para registrar a saida.
void saida_veiculo(){
    char pesq[6];
    FILE *P;
    P=fopen("CARRO.txt", "rb");
    fread(&carro, sizeof(carro), 1, P);
     int i,n=6;
     int horaEnt,minEnt,horaSai, minSai,tminEnt,tminSai,T_total;
     float precoad=0.05;// preço por minuto adicional acima de 1hora
     float preco=0.50;//preço de utilização até 1h

    puts("Digite a Matricula:");
    fflush(stdin);//limpa o conteudo do buffer
    scanf("%s",&pesq);
    strupr(pesq);//deixa caracteres da matricula em maiúsculo
            for(i=0;i<10;i++){
                 if(memcmp(pesq,carro[i].matricula,n)==0){// strcmp compara os n primeiros elementos 
             printf("\n Matricula: %s",carro[i].matricula);
             printf("\n Modelo: %s",carro[i].modelo);
             printf("\n Marca: %s",carro[i].marca);
             printf("\n Cor: %s",carro[i].cor);
             printf("\n Hora de Entrada: %s\n\n", carro[i].entrada.hora);


            printf("\n\n Digite a hora de entrada no formato <horas>enter<minutos>:\n");
            scanf("%d""%d",&horaEnt,&minEnt);
            printf("\n\n\n Digite a hora de saida no formato <horas>enter<minutos>:\n");
            scanf("%d""%d", &horaSai, &minSai);
            tminEnt = (horaEnt*60)+ minEnt;//tempo em minutos de entrada
            tminSai = (horaSai*60)+ minSai;//tempo em minutos de saida
            T_total = tminSai-tminEnt; //calcula o numero total de minutos que esteve no parque

            if(T_total<=60){
                printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: %.2f€ ",T_total, preco);
            }
            else{
                   float valorapagar = ((T_total-60)*precoad) + preco;

                printf("O carro do cliente ficou %.d minutos no estacionamento, e o valor total a pagar e de: %.2f€\n\n\n",T_total, valorapagar);


            }
            carro[i].status=0;//declara que o lugar i já não está ocupado
            excluir(i);//elimina toda a informação da estrutura na posição i do veiculo que saiu


                P=fopen("CARRO.txt", "wb");
                fwrite(&carro, sizeof(carro), 1, P);
                fclose(P);
             }
             if (i==10){
                printf("Veiculo nao encontrado");
             }


             }

}


// Procedimento para listar os veículos que estão no estacionamento.
void listar_veiculo()
{
    int i, n=1;

    FILE *P;
    P=fopen("CARRO.txt", "rb");

    fread(&carro, sizeof(carro), 1, P);


    for(i=0; i<10; i++)
    {
    if(carro[i].status==1)
      {
      printf("Veiculo: %d\n", i+1);
      printf("Matricula: %s\n",carro[i].matricula);
      printf("Modelo: %s\n",carro[i].modelo);
      printf("Marca: %s\n",carro[i].marca);
      printf("Cor: %s\n",carro[i].cor);
      printf("Entrada: %s\n\n\n\n", carro[i].entrada.hora);
      n=0;
      }
    }

    if(n==0)// se n==0 então há veiculos no parque 
    {
    printf("\nEnter voltar ao menu...");
    getch();//recebe qualquer tecla  mas não o mostra no ecrã
    system("cls");
    }
    else// senão não tem veiculos no parque
    {
    puts("Nenhum veiculo registado\nEnter voltar ao menu...");
    getch();
    system("cls");
    }
}

// Função principal
int main()
{
    int opcao;
      FILE* P;


      P=fopen("CARRO.txt", "rb");
      fread(&carro, sizeof(carro), 1, P);
      fclose(P);
        printf("------------------------------------------------");

      do{

      printf("\nGESTAO DE ACESSOS AO PARQUE DE ESTACIONAMENTO \n\n");
      printf("------------------------------------------------\n\n");
      printf("1. Registar entrada do veiculo\n");
      printf("2. Informar saida do veiculo \n3. Lista de veiculos\n4. Sair \n\nOpcao: ");
      scanf("%d", &opcao);

               switch(opcao)
               {
                    case 1:
                    {
                    system("cls");
                    registar_veiculo();
                    break;
                    }
                    case 2:
                    {
                    system("cls");
                    saida_veiculo();
                    break;
                    }
                    case 3:
                    {
                    system("cls");
                    listar_veiculo();
                    break;
                    }
                    case 4: break;

                    default:
                    {
                    system("cls");
                    getchar();

                    }
               }
        }while(opcao!=4);

      getchar();
      system("cls");

}
    
asked by anonymous 28.02.2017 / 16:52

1 answer

0

You are forgetting the space needed to finish the strings.

char matricula[7]; // espaço para "12ff12" e terminador
    
02.03.2017 / 22:33