1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C++ console aplication

Discussão em 'Programação' iniciada por XeniX, 25 de Julho de 2005. (Respostas: 10; Visualizações: 1373)

  1. XeniX

    XeniX Power Member

    Como posso fazer com que o input apareça em asteriscos?
    Tipo ao escrever "1234" aparecer "****"
    Alguém sabe?
    Não é urgente, apenas uma pesquisa que estou a fazer para "evoluir".
     
  2. gnomoamorim

    gnomoamorim Power Member

    Eu na tenho 100% de certeza... mas...

    Sendo um programa para correr na linha de comandos penso que não tens hipotese de fazer isso, pois o cmd não deixa de ser um programa que em mostra uma tecla que seja actuada e sabe realizar determinadas operações.

    Para teres o resultado que queres terias de fazer a tua propria consola com as especificações que desejas. Para isto ja tens que entrar com modo grafico.

    Sem mais... [[]]
     
  3. JPgod

    JPgod Moderador
    Staff Member

    Se fosse para escrever e com um comando aparecer escrito "****" arranja-se, mas dinamicamente não faço ideia...
     
  4. incognito54

    incognito54 Power Member

    estive a ler umas coisas sobre ncurses outro dia e acho q dá para isso... agora só assim c++ n sei
     
  5. HecKel

    HecKel The WORM

    Bem..., tenho aqui uma solução de desenrasque, experimenta fazeres o seguinte:

    - Ao identificar cada caracteres inserido guardar esse valor
    - Fazer clear screen
    - Inserir tantos asteriscos como o tamanho da string guardada

    Isto será dentro de um ciclo até encontrar um return(enter), basicamente isto não te altera o display..., apenas tenta camuflar, provavelmente podes ter uns problemas em casos como backspace..., etc e tal, mas nada como tentar prever essas situações....

    Volto a repetir, isto é um desenrasque, basicamente é uma "má programação"....

    um abraço, HecKel
     
  6. Lancaster

    Lancaster To fold or to FOLD?

    Heyas all...

    Primeiro...não é má programação :P é o desenrascanço português a trabalhar nas horas :P (joking)..

    Em relação ao problema mesmo dito..agora que vi a tua resposta Heckel, que tal se ele ler caracter a caracter, e em cada caracter lido ele mandar um backspace para a console, e depois um *? O backspace deve ter código ASCII, assim já não era preciso limpar o ecrãn todo...a mim parece-me bem...mas não testei...

    Bastava um while dentro de uma coisa deste género:

    Código:
    while(;;)
    {
      char x = readchar();//Não me perguntem a sintaxe correcta a estas horas..pensem em pseudo código..
      switch (x):
          case (backspace):
                  anda para trás e apaga o char do sítio onde está guardado;
          case (enter):
                  finaliza;
          case (uma tecla qq):
          {
                 guarda o char num sítio qq;
                 faz um backspace;
                 escreve o *
          }
          default:
                 não faz nada e deixa-se andar.
    }
    
    Que acham?


    Hasta all [[]]
     
    Última edição: 26 de Julho de 2005
  7. CoolZero

    CoolZero Power Member

    Akilo q tu keres eviar chama-se "echo", ou seja, carregas numa tecla, ela é enviada para o teu programa que por sua vez, automaticamente, envia o eco para o ecrã e assim vês a tecla que primiste.

    http://www.codeguru.com/forum/archive/index.php/t-139472.html

    Se isso não funcionar procura como fazer "disable" ao echo na windows console
     
  8. nothing

    nothing Power Member

    Punha no default o que está naquele case(uma tecla qq).
     
  9. CrazyBomber

    CrazyBomber Power Member

    Bolas, isto é mm desenrascanso!
    A melhor maneira é fazeres o teu proprio readLine() ou qq coisa parecida.
    Eu já fiz isso há 2 anos, praí, para ADA, pq o scanf() não tava a funcionar bem, então fizemos a nossa própria função :)

    Há de haver outra função para ler cada char do input, sem o escrever. Não me lembro qual é (vê o stdio.h), mas é só fazeres uma função que vai adicionando chars até encontrar um newline.
    Na minha versão mandavamos imprimir o char recebido, na tua mandas imprimir um * e já está :)
    Posso ir investigar mais sobre isso, se não te desenrascares. Devo ter o trabalho algures por aki...

    EDIT: só agora reparei que o Lancastar já tinha postado esta solução. ops :sad:
     
  10. sapropel

    sapropel Power Member

    usando standard C ou C++ isso não é possivel. usas a função getch() que recebe input do teclado mas não escreve para o standard output. essa função em windows esta disponivel na biblioteca conio (disponivel em praticamente todos os compiladores) e em *nix na biblioteca ncurses.

    aqui vai o código para o que queres:

    #include <iostream>
    #include <string>
    #include <conio.h>

    int main( int argc, char ** argv )
    {
    std::string password;
    char c;

    while( (c = getch()) != '\r' )
    {
    password += c;
    std::cout << "*";
    }
    std::cout << std::endl << "a password inserida e: " << password << std::endl;
    return 0;
    }


    e prontos..
     
  11. XeniX

    XeniX Power Member

    Muito obrigado a todos! Eu vou tentar o que vocês sugeriram, mas só lá para sábado é que vou poder tentar(tou sem compilador, fiz asneira sem me aperceber (debug ao microsoft visual studio) e aquilo começou a dar erros. O pior é que eu tive de apagar o programa e não tinha o ficheiro instalável. O meu irmão vai trazê-lo esta semana (se é que ainda o tem, mas ele conhece tipos em L.E.S.I. que devem tê-lo).
    Bem , mas apesar desta confusão toda vou tentar: se der dá s não der obrigado na mesma a todos vocês!!!
    :001: :001: :001: :001:
     

Partilhar esta Página