Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ricardo_1977

Login com asteriscos

Mensagens Recomendadas

ricardo_1977

boa tarde,

alguem consegue por a password a ser vista no ecra com asteriscos(por exemplo) mas o seu valor correcto a ser guardado numa variavel?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
renafi

Já experimentaste usar o getch()?

Capturas o caracter inserido no teclado, e poes a aparecer no ecra um *


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Lol um dos primeiros programas que fiz nas aulas ao aprender C... Ficas aqui com ele:

#include <stdio.h>

int main(){

char pass[100];
char ch;
int aux = 0;

do{

ch = getch(); // recebe caracter

if ( (int)ch != 13) // Inseri o if pois imprimia tambem um asterisco no enter ficando mais um 

asterisco para alem do comprimento da pass
putchar(42); // escreve ascii do asterisco 

pass[aux] = ch; // adiciona o caracter a string da pass
aux++; //Incrementa a posicao..

}
while ( (int)ch != 13 ); // Enquanto não introduzir o Enter 13 na ascii

pass[aux] = '\0'; // Fecha a string

printf("\n\nA tua passe: %s", pass); //Imprime a pass inserida

getchar(); //Espera por algo.. apenas para não fechar a janela sem vermos a ultima impressão

return 0;

}

P.S.: Agora com um bocadinho de experiência vejo que tem algumas não é falhas, mas pormenores a melhorar, mas dá para perceber a ideia...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Bem visto :D Como disse aquilo era um programa dos primeiros dias...

Para isso adiciona-se um if em que se o (int)ch == 8 que é o backspace na ascii ele não faz o putchar e depois das duas uma.. ou se apaga tudo e mete-se só a quantidade de asteriscos igual ao comprimento da string até então, ou brinca-se com o gotoxy e insere um caracter 255 para além de colocar o cursor na posição anterior.

(Agora penso que deve haver uma forma mais simples ;))

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Obvio que estava na brincadeira  ;)

O que se podia fazer era utilizar o caracter de escape \b que dá mesmo um backspace.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Ora bem, vou deixar aqui a minha contribuição. Aproveitei que estou em windows e fiz com o getch.

Fica aqui, então:

#include <stdio.h>

int main(void) {
  char password[120];
  char ch;
  int aux = 0;
  while(ch != 13) {
    ch = getch();
    if(ch != 13 && ch != 8) {
      password[aux] = ch;
      aux++;
      putchar(42);
    }
    if(ch == 8) {
      aux--;
      printf("\b \b");
    } 
  }
  password[aux] = '\0';
  printf("\n%s\n", password);
  getch();
  return 0;
}


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Nem me lembrava do \b... Adaptando a minha ideia, a tua ideia e o código acima algo a funcionar direito seria:

#include <stdio.h>

int main(){

char pass[100];
char ch;
int aux = 0;

do{

ch = getch(); // recebe caracter

if ( (int)ch == 8 ){
printf("\b"); //Apaga o ultimo
putchar(255); //Adiciona um caracter em branco 
printf("\b"); //Volta para a posição anterior
aux--; //Decrementa a posição onde vai ser inserida a letra
}else{

if ( (int)ch != 13 ) // Inseri o if pois imprimia tambem um asterisco no enter ficando mais um asterisco para alem do comprimento da pass e
putchar(42); // escre ascii do asterisco

pass[aux] = ch; // adiciona o caracter a string da pass
aux++; //Incrementa a posicao..

}
}while ( (int)ch != 13 ); // Enquanto não introduzir o Enter 13 na ascii

pass[aux] = '\0'; // Fecha a string

printf("\n\nA tua passe: %s\n", pass); //Imprime a pass inserida

getchar(); //Espera por algo.. apenas para não fechar a janela sem vermos a ultima impressão

return 0;

}

+/- isto :D

EDIT: Usa o do localhost, está bem melhor  ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Que confusão que fizeste para aí. Para apagar um printf chega. E não precisas de um cast quando verificas o ch porque os chars são números na verdade (ascii).

p.s. O meu programa vai dar mal num caso. Tenta descobrir  ;)


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Uma coisa mal será no decremento do aux... se já não houver caracteres e apagar na mesma vai para posições negativas...

mas isto com um simples if (aux != 0) aux--; resolvia...

Uma outra coisa se fosse para fazer algo bem feitinho seria um if que apenas passa-se para a string caracteres alfanuméricos, pois se ao inserir a pass carregares numa seta, ou noutra tecla qualquer vai inserir o caracter na string..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.