Chcel by som sa spytat akym sposobom je mozne v linuxe skryt znaky, ktore vkladam do konzoly. Napriklad ked spustim program "su" tak mi vypise prompt
#########
Password: #########a kazdy dalsi znak az po ENTER je neviditelny. Neviem ci je to zalezitost programovacieho jazyka (C++) alebo nejakeho nastavenia v shelli. Dakujem za odpoved.

je to zalezitost programu alebo terminalu
...cout<<"Vlozte prosim heslo: ";
char pole[255];
cin.getline(pole, 255); //tu sa vklada heslo, ale vlozene znaky su VIDITELNE
cout<<"\nHeslo vlozene";
Vystup:
Vlozte prosim heslo: mojehesloHeslo vlozene
Pozadovany vystup:
Vlozte prosim heslo:Heslo vlozene
mozno by si sa mal chvilu venovat aspon standardnej kniznici, ked uz chces robit v C++ ale ignorovat C
Dakujem za pomoc a zatvaram tetnto thread.
Skusal som to cin.getch() v tvare
cin.getch(znak)dalej v tvarezn=cin.getch()a takisto s predponou "std::" pod Ubuntu linuxom 7.10 gutsy s kompilatorom g++ ale vypisalo mi chybunevidit.cc:6: error: ‘struct std::istream’ has no member named ‘getch’Vlozene kniznice boli IOSTREAM, STDIO.Hstty echo#include <iostream>
#include <unistd.h>
int main()
{
char * z=new char;
z=getpass("Vloz heslo");
std::cout<<"Heslo je: "<<z;
return 0;
}
Pre C mame funkciu getch()
Pre C++ mame funkciu getpass(), ktorá je deprecated
Takže pre C++ neexistuje nič v súhlade so štandardom pre prebratie hesla? Platforma je linux x86
HISTORY A getpass() function appeared in Version 7 AT&T UNIX. CONFORMING TO Present in SUSv2, but marked LEGACY. Removed in POSIX.1-2001.nie si nejaky vztahovacny? bolo v dobe v7 AT&T UNIX vobec C++?
prepac, ale neviem co si myslel tou vztahovacnostou..ja som len sumarizoval ako stojime s odpovedou na moju otazku. Cize getpass() je len nejake volanie operacneho systemu *nix, ktore nema nic spolocne s jazykom C/C++? Takze mozem topic uzavriet s tym ze najlepsie je poucit tuto funkciu (napriek tomu ze je deprecated)?
#include <iostream> #include <termios.h> #include <string> std::string mygetpass(void) { struct termios oldt, newt; std::string s; tcgetattr ( STDIN_FILENO, &oldt ); newt = oldt; newt.c_lflag &= ~( ICANON | ECHO ); tcsetattr ( STDIN_FILENO, TCSANOW, &newt ); std::cin >> s; tcsetattr ( STDIN_FILENO, TCSANOW, &oldt ); return s; } int main(void) { std::cout << "Zadaj heslo: "; std::string s=mygetpass(); std::cout << std::endl << "Zadane heslo bolo: " << s << std::endl; }Nemas zac :)