Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

QuitoSousa

Pedir ao utilizador para inserir matrícula

Recommended Posts

QuitoSousa

Boa tarde,

Basicamente eu preciso de pedir ao utilizador que insira uma matrícula num dos 3 formatos abaixo.

A matrícula é suposto ir para um vector de uma estrutura.

1 - 00-00-XX
2 - XX-00-00
3 - 00-XX-00

Onde:

XX são quaisquer duas letras maiúsculas de A a Z inseridas pelo utilizador.

00 é qualquer número de 00 a 99 inseridos pelo utilizador.

Alguém que me consiga ajudar?

Obrigado desde já!

Share this post


Link to post
Share on other sites
HappyHippyHippo

O mais simples é leres a linha completa para um buffer qualquer e depois tentar ler esse buffer de forma formatada a ver se bate certo com o formato esperado

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
QuitoSousa

Boa tarde,

Obrigado pela resposta.

Isso é o que estou a tentar fazer mas não estou a conseguir, vou tentar explicar da melhor maneira que conseguir.

Envio também um esboço do código que tenho para tentar ajudar com a explicação.

Tenho duas formas de inserir a matrícula. Na primeira, obrigo o utilizador a inserir números e letras no sítio adequado mas para os números de 00 até 09, se o utilizador inserir só 0 ou só 9, aparece o primeiro problema, o primeiro zero não vai aparecer. Já na parte das letras, ele aceita mas imprime a mensagem de erro. Com a utilização deste método também não estou a trabalhar com a struct que criei e era um requisito.

Na segunda forma, trabalho com a struct mas tenho 2 problemas. Primeiro não obrigo o utilizador a inserir a matricula de forma nenhuma. E o segundo passa pelo armazenamento dos valores. Vou tentar dar um exemplo prático.

Digamos que a empresa pode ter no máximo 50 carros mas nem sempre tem 50. Neste exacto momento tem 13 carros e quero adicionar um novo, não sei bem como fazer para guardar dados num 14º espaço que ainda não esteja a ser usado e dessa forma inserir todos os dados que meti no novo carro para lá.

#include <stdio.h>

int novoCarro ();

struct dadosCarro{
    char numeroIdentificacao[8], marca[20], modelo[20];
};

int main (void){

    int numeroCarros, requisicoesCarros, escolhaMenu;

    printf("Carros da empresa\n");

    printf("Total de carros: %d", numeroCarros);
    printf("\nRequisicoes de carros: %d", requisicoesCarros);

    printf("\n1. Novo Carro\n");
    printf("2. Novo Carro V2\n");
    printf("3. Requisicoes\n");

    do{
        printf("Selecione a opcao: ");
        fflush(stdin);
        scanf("%d", &escolhaMenu);
        if (escolhaMenu < 0 || escolhaMenu > 3)
            printf("Opcao invalida, por favor escolha uma opcao valida.\n\n");
    }while(escolhaMenu < 0 || escolhaMenu > 3);

    switch(escolhaMenu){
    case 1:
        novoCarro();

        break;

    case 2:
        novoCarroV2();
        break;

    case 3:
        
        break;

    default:
        printf("Opcao invalida, por favor escolha uma opcao valida.");
        }

return 0;
}


int novoCarro (){

    int escolhaMatricula, numerosMatricula1, numerosMatricula2;
    char letrasMatricula1, letrasMatricula2;

    printf("Novo carro\n");
    do{
        printf("1 - 00-00-XX \n");
        printf("2 - XX-00-00 \n");
        printf("3 - 00-XX-00 \n");
        printf("Escolha o tipo de matricula do carro: ");
        fflush(stdin);
        scanf("%d", &escolhaMatricula);
        if (escolhaMatricula < 0 || escolhaMatricula > 3)
            printf("Opcao invalida, por favor escolha uma opcao valida.\n\n");
    }while(escolhaMatricula < 0 || escolhaMatricula > 3);

    switch(escolhaMatricula){
    case 1:
        do{
        printf("Introduza os primeiros numeros da matricula: ");
        fflush(stdin);
        scanf("%d", &numerosMatricula1);
        if (numerosMatricula1 < 0 || numerosMatricula1 > 99)
            printf("Numero invalido, por favor introduza um numero entre 00 e 99.\n\n");
        }while(numerosMatricula1 < 0 || numerosMatricula1 > 99);

        do{
        printf("Introduza os segundos numeros da matricula: ");
        fflush(stdin);
        scanf("%d", &numerosMatricula2);
        if (numerosMatricula2 < 0 || numerosMatricula2 > 99)
            printf("Numero invalido, por favor introduza um numero entre 00 e 99.\n\n");
        }while(numerosMatricula2 < 0 || numerosMatricula2 > 99);

        do{
        printf("Introduza as letras da matricula: ");
        fflush(stdin);
        scanf("%c%c", &letrasMatricula1, &letrasMatricula2);
        if ((letrasMatricula1 > 'a' && letrasMatricula1 < 'z') || (letrasMatricula2 > 'a' && letrasMatricula2 < 'z') || letrasMatricula1 <= 0 || letrasMatricula1 > 0 || letrasMatricula2 <= 0 || letrasMatricula2 > 0)
            printf("Letras invalidas, por favor introduza duas letras maiusculas entre A e Z.\n\n");
        }while(letrasMatricula1 < 'A' || letrasMatricula1 > 'Z' || letrasMatricula2 < 'A' || letrasMatricula2 > 'Z');

        printf("A matricula e: %02d-%02d-%c%c", numerosMatricula1, numerosMatricula2, letrasMatricula1, letrasMatricula2);

        break;

    case 2:
        do{
        printf("Introduza as letras da matricula: ");
        fflush(stdin);
        scanf("%c%c", &letrasMatricula1, &letrasMatricula2);
        if (letrasMatricula1 >= 'a' || letrasMatricula2 >= 'a' || letrasMatricula1 <= 0 || letrasMatricula1 > 0 || letrasMatricula2 <= 0 || letrasMatricula2 > 0)
            printf("Letras invalidas, por favor introduza duas letras maiusculas entre A e Z.\n\n");
        }while(letrasMatricula1 < 'A' || letrasMatricula1 > 'Z' || letrasMatricula2 < 'A' || letrasMatricula2 > 'Z');

        do{
        printf("Introduza os primeiros numeros da matricula: ");
        fflush(stdin);
        scanf("%d", &numerosMatricula1);
        if (numerosMatricula1 < 0 || numerosMatricula1 > 99)
            printf("Numero invalido, por favor introduza um numero entre 00 e 99.\n\n");
        }while(numerosMatricula1 < 0 || numerosMatricula1 > 99);

        do{
        printf("Introduza os segundos numeros da matricula: ");
        fflush(stdin);
        scanf("%d", &numerosMatricula2);
        if (numerosMatricula2 < 0 || numerosMatricula2 > 99)
            printf("Numero invalido, por favor introduza um numero entre 00 e 99.\n\n");
        }while(numerosMatricula2 < 0 || numerosMatricula2 > 99);

        printf("A matricula e: %c%c-%02d-%02d", letrasMatricula1, letrasMatricula2, numerosMatricula1, numerosMatricula2);

        break;

    case 3:
        do{
        printf("Introduza os primeiros numeros da matricula: ");
        fflush(stdin);
        scanf("%d", &numerosMatricula1);
        if (numerosMatricula1 < 0 || numerosMatricula1 > 99)
            printf("Numero invalido, por favor introduza um numero entre 00 e 99.\n\n");
        }while(numerosMatricula1 < 0 || numerosMatricula1 > 99);

        do{
        printf("Introduza as letras da matricula: ");
        fflush(stdin);
        scanf("%c%c", &letrasMatricula1, &letrasMatricula2);
        if (letrasMatricula1 >= 'a' || letrasMatricula2 >= 'a' || letrasMatricula1 <= 0 || letrasMatricula1 > 0 || letrasMatricula2 <= 0 || letrasMatricula2 > 0)
            printf("Letras invalidas, por favor introduza duas letras maiusculas entre A e Z.\n\n");
        }while(letrasMatricula1 < 'A' || letrasMatricula1 > 'Z' || letrasMatricula2 < 'A' || letrasMatricula2 > 'Z');

        do{
        printf("Introduza os segundos numeros da matricula: ");
        fflush(stdin);
        scanf("%d", &numerosMatricula2);
        if (numerosMatricula2 < 0 || numerosMatricula2 > 99)
            printf("Numero invalido, por favor introduza um numero entre 00 e 99.\n\n");
        }while(numerosMatricula2 < 0 || numerosMatricula2 > 99);

        printf("A matricula e: %c%c-%02d-%02d", letrasMatricula1, letrasMatricula2, numerosMatricula1, numerosMatricula2);

        break;

    default:
        printf("Opcao invalida, por favor escolha uma opcao valida.");
    }

}

int novoCarroV2(){

    struct dadosCarro novoCarro;

    printf("\nIntroduza matricula: ");
    fflush(stdin);
    scanf("%s", novoCarro.numeroIdentificacao);
    printf("\nMatricula e: %s", novoCarro.numeroIdentificacao);

}

Isto provavelmente são dúvidas básicas para programadores de nível intermédio mas eu comecei nisto à pouco tempo e como tal, não sei como fazer.
Obrigado desde já.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×

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.