Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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;
}

 

Postado

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
Postado

@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  .

Postado
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

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...