QuitoSousa 0 Posted May 4, 2019 Report Share Posted May 4, 2019 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á! Link to post Share on other sites
HappyHippyHippo 1,162 Posted May 5, 2019 Report Share Posted May 5, 2019 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 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to post Share on other sites
QuitoSousa 0 Posted May 5, 2019 Author Report Share Posted May 5, 2019 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á. Link to post Share on other sites
Recommended Posts