| Author |
Message
|
niemamkolan Poziom 7

Joined: 06 Sep 2009 Posts: 22 Location: OSW
|
#1
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

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#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

Joined: 06 Sep 2009 Posts: 22 Location: OSW
|
#3
19 Mar 2010 21:39 Re: [c++]hasło pod gwiazdkami |
|
|
|
a coś więcej?
|
|
| Back to top |
|
 |
Google

|
#
19 Mar 2010 21:39 |
|
|
|
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#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

Joined: 28 Jul 2004 Posts: 1812 Location: Wrocław
|
#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

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#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

|
#
22 Mar 2010 17:36 |
|
|
|
|
|
| Back to top |
|
 |
akaz_ Poziom 10

Joined: 22 Mar 2010 Posts: 52
|
#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

Joined: 10 Jul 2009 Posts: 136 Location: Gliwice
|
|
| Back to top |
|
 |
Google

|
#
22 Mar 2010 18:24 |
|
|
|
|
|
| Back to top |
|
 |
akaz_ Poziom 10

Joined: 22 Mar 2010 Posts: 52
|
#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

Joined: 10 Jul 2009 Posts: 136 Location: Gliwice
|
#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 |
|
 |