• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Localhost

Dúvida password

11 mensagens neste tópico

Olá pessoal, cá estou eu mais uma vez para pedir ajuda :P

É assim, estou aqui num mini projecto que comecei e agora preciso de uma coisa: Como, ao escrever-se no console, transformar-se as letras em asteriscos ou algo assim parecido? Não estou mesmo a ver...

Eu já implementei um mini sistema de password, so falta mesmo isso...

Abraços a todos  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se estiveres em Linux podes usar a função getpass(): http://www.gnu.org/s/libc/manual/html_node/getpass.html

Ela não mostra os asteriscos, para isso tens de mexer no código da função para os mostrar de cada vez que é lido um caracter.

Se for em Windows, podes usar as funções getch() e putch():

http://cboard.cprogramming.com/c-programming/108706-password-asterisk.html

http://www.cplusplus.com/forum/general/3570/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado mas fiquei na mesma, tipo, eu ja tinha pensado nessas funçoes e ate ja tentei utilizar a getch() mas quando a uso mal digito uma tecla o programa fecha  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens q fazer isso do getch e putch dentro de um while até encontrares '\n', q é qd o utilizador carrega no enter.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bruno1234 ja tentei nao funciona e percebo porquê, simplesmente porque o meu programa nao é só essa new line que tem, tem muitas delas portanto acho que so da manualmente  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char *LerPass(char *pass)
{
    int i;
    char ch;
    for(i=0;i<(MAX_PASS-1);i++)
    {
        ch=getch();
        if(ch == '\b')
        {
            if(i > 0) {
                pass[i--]=NCHR;
                i--;
                putchar(ch);
                printf(" \b");
            }else
                putchar(NCHR);
        }
        else if(ch == '\032')
        {
            printf("Nao pode Conter Espacos");
            break;
        }
        else if(ch == '\r')
            break;
        else
        {
            pass[i]=ch;
            putchar('*');
        }

    }
    pass[i]=NCHR;
    return pass;
}

Tens aqui o que tu queres já tinha implementado isto à uns anos.

Não tem comentários, mas também não é difícil de perceber ficas com esse trabalho para ti

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se estiveres em Linux podes usar a função getpass(): http://www.gnu.org/s/libc/manual/html_node/getpass.html

Nesse exemplo mostra como desabilitar a escrita na consola, ler a password e depois voltar a habilitar a escrita na consola.... E eu preciso disso num trabalho que estou a fazer....

Por isso já preparei um pequeno exemplo para testar....

#include <termios.h>
#include <stdio.h>

/* Variaveis */
struct termios old, new;

/* Turn echoing off and fail if we can't */
int desligarTerminal(FILE *stream)
{
if (tcgetattr (fileno (stream), &old) != 0)
	return -1;

new = old;
new.c_lflag &= ~ECHO;

if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
	return -1;

return 0;
}

/* Restore terminal */
void ligarTerminal(FILE *stream)
{
(void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
}

int main (int argc, char *argv[])
{
int d = desligarTerminal();

char text[40];
scanf("%s", text);

int l = ligarTerminal();

printf("Introduziu: %s\n", text);

return 0;
}

Mas não estou a entender o que devo colocar no parâmetro "FILE *stream"....

cumps  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, vou já implementar eheheh

Mas para a próxima não me dês logo ok?

Sabes, eu adoro pensar, podias dar pistas ou ajudar mas não dar logo o code mas não estou a ser mal agradecido e aprecio a tua ajuda mas para a próxima tenta fazer isso  :P

Abraços

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

óh  :-[, o parâmetro "FILE *stream" é "stdout", claro.....

cumps  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, vou já implementar eheheh

Mas para a próxima não me dês logo ok?

Sabes, eu adoro pensar, podias dar pistas ou ajudar mas não dar logo o code mas não estou a ser mal agradecido e aprecio a tua ajuda mas para a próxima tenta fazer isso  :cheesygrin:

Abraços

Sim eu sei, eu tambem gosto de deixar o pessoal pensar um pouco, mas tava com pouco paciencia

0

Partilhar esta mensagem


Link 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