Jump to content

Dúvida password


Localhost

Recommended Posts

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

É 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  😛

here since 2009

Link to comment
Share on other 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/

Link to comment
Share on other 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

Link to comment
Share on other 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  😛

Link to comment
Share on other 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  😁

Abraços

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.