Ir ao conteúdo
  • Cadastre-se

C++ Digitar Data sem colocar barras


Posts recomendados

Boa tarde, pessoal!

Eu gostaria que o usuário:

Pudesse digitar a data de nascimento dele sem ser obrigado a colocar as barras;

Dar a chance dele errar o número quantas vezes quisesse;

 

preciso comparar o dia e o mês com uma data já predefinida dentro da variável "Data".

 

Uma possível solução seria criar uma variável para verificar se o usuário digitou o backespace, e senão a próxima recebe o valor, mas eu não consigo, alguém pode me ajudar??. Grato desde já.

 

#include <iostream>
#include "conio.h"
using namespace std;
int main() {
    char d,dd,m,mm,a,aa,aaa,aaaa;
    string data = "30/01";
    
    cout << "Digite sua data de nascimento: ";
    d = getch();
    cout << d;
    
    dd = getch();
    cout << dd;
    
    cout << "/";
    
    m = getch();
    cout << m;
    
    mm = getch();
    cout << mm;
    
    cout << "/";
    
    a = getch();
    cout << a;
    
    aa = getch();
    cout << aa;
    
    aaa = getch();
    cout << aaa;
    
    aaaa = getch();
    cout << aaaa;
    
    
    return 0;
}

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Arthur_Fernandes    seu código está certo , só precisa fazer a comparação ,

#include <iostream>
#include "conio.h"
#include <string.h>
#include <cstring>
using namespace std;
int main() {
    string d,dd,m,mm,a,aa,aaa,aaaa;
    string data = "30/01";

    cout << "Digite sua data de nascimento: ";
    d = getch();
    cout << d;

    dd = getch();
    cout << dd;

    cout << "/";

    m = getch();
    cout << m;

    mm = getch();
    cout << mm;

    cout << "/";

    a = getch();
    cout << a;

    aa = getch();
    cout << aa;

    aaa = getch();
    cout << aaa;

    aaaa = getch();
    cout << aaaa;
    if(data == ( d + dd + "/" + m + mm ))
        cout << "\n\n\tdata correta . . . !\n\n" << endl;
    else
        cout << "\n\n\tdata errada . . . !\n\n" << endl;

    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Use o botão code como está descrito no primeiro post do forum. Veja a diferença:

 

#include <iostream>
#include "conio.h"
using namespace std;
int main() {
    char d,dd,m,mm,a,aa,aaa,aaaa;
    string data = "30/01";
    
    cout << "Digite sua data de nascimento: ";
    d = getch();
    cout << d;
    
    dd = getch();
    cout << dd;
    
    cout << "/";
    
    m = getch();
    cout << m;
    
    mm = getch();
    cout << mm;
    
    cout << "/";
    
    a = getch();
    cout << a;
    
    aa = getch();
    cout << aa;
    
    aaa = getch();
    cout << aaa;
    
    aaaa = getch();
    cout << aaaa;
    
    
    return 0;
}

 

Seu programa está muito difícil de ler. 

 

conio.h é algo dos anos '80 copiado de algo ainda mais velho. Não é possível que ainda se precise disso 40 anos depois em uma linguagem tão expressiva quanto C++. Sugiro nunca usar isso.

 

9 horas atrás, Arthur_Fernandes disse:

Uma possível solução seria criar uma variável para verificar se o usuário digitou o backespace, e senão a próxima recebe o valor, mas eu não consigo, alguém pode me ajudar

 

Essas teclas de edição não estão disponíveis para o programa e é melhor assim. Um programa não recebe backspace e alguns outros caracteres, em geral. 

 

Se quer ler isso deve mudar o modo de entrada e desligar line input e echo. No Unix/Linux se chama RAW mode. Você pode fazer qualquer coisa em C ou C++. O sistema todo foi escrito assim.

 

Mas nesse caso aqui não compensa. Apenas leia a linha toda em uma string e trate no programa. Se for uma data válida você aceita, se não for pede outra. O simples.

 

Não parece importante reprogramar a console só pra ler isso.

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@arfneto     creio que o que o  @Arthur_Fernandes   esteja querendo  é  que o usuário  digitando os números  da data e sem precisar teclar ENTER  o programa pegue esses números digitados  faça a comparação  para verificar se essa data inserida é válida ou não .  ,   tipo a senha do windows , que quando digitamos os caracteres certos ele inicia , senão mostra msg de erro  .

Link para o comentário
Compartilhar em outros sites

Em 01/10/2021 às 14:50, Arthur_Fernandes disse:

digitar a data de nascimento dele sem ser obrigado a colocar as barras

 

10 minutos atrás, devair1010 disse:

digitando os números  da data e sem precisar teclar ENTER  o programa pegue esses números digitados  faça a comparação  para verificar se essa data inserida é válida ou não .  ,   tipo a senha do windows

 

19 horas atrás, arfneto disse:

Se quer ler isso deve mudar o modo de entrada e desligar line input e echo

 

:) juntando os 3 no Windows, é isso, @devair1010. Precisa desligar LINE_INPUT como descrito no manual. Se desligar também ECHO pode editar os dados em tempo real. mostrando a barra quando encontrar um dia válido e mostrando outra barra quando encontrar um mês válido. A ideia do BACKSPACE como @Arthur_Fernandes mencionou, seria permitir ao programa editar valores já considerados, como um caso em que o cara digitou 03/01/2021 ia teclar ENTER e acabou percebendo que era 30/01/2021 que ele queria digitar, então o programa precisa receber o BACKSPACE e tratar, porque sózinho o sistema não vai saber que precisa apagar as barras que o programa colocou lá...

 

Era algo comum em outros tempos, line editing. Hoje normalmente o programa não trata isso, e as "teclas de edição" são processadas pelo sistema.

 

Documentação sobre a console no Windows: Guia de Referência para a console

No Linux pode usar man termio e man ioctl 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!