FAQ | Points | Add... | Recent posts | Search | Register | Log in


[c++] maskowanie wpisywanego hasła


Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Beginners Programming -> [c++] maskowanie wpisywanego hasła
Author
Message
niemamkolan
Poziom 7
Poziom 7


Joined: 06 Sep 2009
Posts: 22
Location: OSW

Post#1 Post from the author of the topic 19 Mar 2010 08:45   

[c++] maskowanie wpisywanego hasła


witam mam taki kod

Code:
    string haslo;
    haslo='1234';
    cout<<"Podaj haslo: ";
    for(;haslo!="1234";)
    {cin>>haslo;
    if(haslo!="1234")
    cout<<"Haslo nieprawidlowe..."<<endl<<"Podaj haslo: ";
    else system("cls");
   }


i chcę żeby przy wpisywaniu hasła były gwiazdki

z góry thx za pomoc
Back to top
   
Dżyszla
Poziom 24
Poziom 24


Joined: 15 May 2005
Posts: 4528
Location: Żory (kiedyś Opole)

Post#2 19 Mar 2010 11:23   

Re: [c++]hasło pod gwiazdkami


getch, zapisuj do stringa, wyświetlaj gwiazdkę
Back to top
   
niemamkolan
Poziom 7
Poziom 7


Joined: 06 Sep 2009
Posts: 22
Location: OSW

Post#3 Post from the author of the topic 19 Mar 2010 21:39   

Re: [c++]hasło pod gwiazdkami


a coś więcej?
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 19 Mar 2010 21:39   





Back to top
   
Dżyszla
Poziom 24
Poziom 24


Joined: 15 May 2005
Posts: 4528
Location: Żory (kiedyś Opole)

Post#4 19 Mar 2010 22:24   

Re: [c++]hasło pod gwiazdkami


1. Czytaj znak
2. Jeśli ENTER - przejdź do 6
3. Wyświetl gwiazdkę.
4. Dopisz znak do ciągu
5. Idź do 1.
6. Porównaj hasło.
Back to top
   
ed-ek
Poziom 22
Poziom 22


Joined: 28 Jul 2004
Posts: 1812
Location: Wrocław

Post#5 22 Mar 2010 12:37   

Re: [c++]hasło pod gwiazdkami


Dżyszla wrote:
1. Czytaj znak
2. Jeśli ENTER - przejdź do 6
3. Wyświetl gwiazdkę.
4. Dopisz znak do ciągu
5. Idź do 1.
6. Porównaj hasło.

Chyba nawiązujesz do swego poprzedniego postu aby to robić z wykorzystaniem fcji getch(). Niby wszystko w porządku, ale po wczytaniu znaku np: ch=getch(); jak opróżnisz bufor klawiatury aby wczytać następny znak? Rozwiń swoją myśl bo bardzo mnie to interesuje.
Back to top
   
Dżyszla
Poziom 24
Poziom 24


Joined: 15 May 2005
Posts: 4528
Location: Żory (kiedyś Opole)

Post#6 22 Mar 2010 17:36   

Re: [c++] maskowanie wpisywanego hasła


Jakiego bufora? Getch() nie zostawia nic w buforze...
Code:
void main()
{
    char c='A';

    while((c=getch())!=13)
        printf("%c",c);
}

Back to top
   
Google

Google Adsense


Post# 22 Mar 2010 17:36   





Back to top
   
akaz_
Poziom 10
Poziom 10


Joined: 22 Mar 2010
Posts: 52

Post#7 22 Mar 2010 18:14   

Re: [c++] maskowanie wpisywanego hasła


Jeśli nie koniecznie muszą to być gwiazdki, a chcesz jedynie nie wyświetlać hasła,
użyj char *getpass(const char *prompt) z unistd.

Przykładowe użycie:
Code:

#include <unistd.h>
#include <stdio.h>

void main() {
    char *haslo = getpass("Podaj haslo: ");
    printf("%s", haslo);
}


Co prawda to jest C, ale nie będziesz miał raczej z tym problemu,
do porównywania możesz użyć int strcmp( const char * str1, const char * str2 ) (zwraca 0 gdy się zgadzają).


Jeżeli bardzo zależy Ci na gwiazdkach, pod uniksami możesz to zrobić wyłączając
buforowanie terminala za pomocą int tcsetattr(int fd, int optional_actions, struct termios *termios_p) z termios:

Code:

    struct termios stary, nowy;

    tcgetattr( STDIN_FILENO, &stary );  // pobierz aktualne parametry
    nowy = stary;
    nowy.c_lflag &= ~( ICANON | ECHO );  //wylacz buforowanie oraz wyswietlanie wpisywanych znakow
    tcsetattr( STDIN_FILENO, TCSANOW, &nowy ); //ustaw wyzej podane parametry
    /* kod od wczytywania */
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt ); //przywroc stare parametry
    /* reszta */

Back to top
   
Dariusz Bismor
Poziom 13
Poziom 13


Joined: 10 Jul 2009
Posts: 136
Location: Gliwice

Post#8 22 Mar 2010 18:24   

Re: [c++] maskowanie wpisywanego hasła


Niestety, sprawa nie jest prosta i nie należy do zagadnień związanych z językiem C++ czy nawet C. Wspomniana funkcja getch() nie należy do standardu języka C++ ani C. Pod *nixem jest dostępna w bibliotece ncurses. Jeżeli piszesz dla terminala kompatybilnego z vt100, to pod tym adresem znajdziesz sposób wyłączenia echa, który będzie efektywny przy każdym odczycie, także za pomocą cin:
http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1269278562197+28353475&threadId=380786

HTH,
Dariusz
Back to top
   
Google

Google Adsense


Post# 22 Mar 2010 18:24   





Back to top
   
akaz_
Poziom 10
Poziom 10


Joined: 22 Mar 2010
Posts: 52

Post#9 22 Mar 2010 18:44   

Re: [c++] maskowanie wpisywanego hasła


Dariusz, nigdzie nie użyłem getch(), a z C chodziło mi o wykorzystanie char* zamiast używanego w CPP stringa.
Przykład z linku, który podałeś, jest identyczny z podanym moim przykładem (tcsetattr z termios).
Swoją drogą, w termios znajduje się również getchar(), więc nie trzeba dodatkowo wykorzystywać ncurses.
Back to top
   
Dariusz Bismor
Poziom 13
Poziom 13


Joined: 10 Jul 2009
Posts: 136
Location: Gliwice

Post#10 23 Mar 2010 19:34   

Re: [c++] maskowanie wpisywanego hasła


akaz_, moja odpowiedź była nie do Twojego postu, ale do jednego wcześniej. Kiedy ją zacząłem pisać, Twojego postu jeszcze nie było. Faktycznie, Twój opis jest bardziej kompletny. Nie zmienia to jednak faktu, że ani w specyfikacji C, ani w specyfikacji C++ nie ma mechanizmów pozwalających uzyskać efekt braku echa.

Dariusz
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Beginners Programming -> [c++] maskowanie wpisywanego hasła
Page 1 of 1
Similar topics
PCF8583 i maskowanie roku i dnia tygodnia (2)
[C]Mega32 maskowanie portu (9)
maskowanie bitów w liczbie (6)
[Bascom] 4 wejścia 2 wyjścia - maskowanie bitów (4)

Page generation time: 0.094 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed