nevidljiva slova

nevidljiva slova

offline
  • Senor  Male
  • Ugledni građanin
  • Uroš Stegić
  • Pridružio: 19 Jul 2006
  • Poruke: 308
  • Gde živiš: Pančevo

Zanimaju me predlozi. Nebitan je program i svrha programa, samo me zanima idejno rešenje za jedan delić. Kako da iskoristim scanf funkciju tako da se tokom izvršavanja programa ne ispisuje na ekranu ono što korisnik kuca. Nije bitno da li će to biti nevidljivo ili će ispisivati zvezdice. Poenta: korisnik unosi password koji je tipa char*, ali ne želim da se ispisuje na ekranu to što on kuca TOKOM KUCANJA. Tražio sam po sistemu i po netu kako je napisan scanf ali bezuspešno. Da li da koristim nešto drugo ili kako?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Možeš da probaš s funkcijom getpass
char pwd[129]; pwd = getpass(""); printf("PWD: %s!\n", pwd);



offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Napisano: 23 Feb 2011 9:35

Ne postoji definisano u standardu za C tako nesto. To zavisi od operativnog sistema, tako da je sledece pitanje: za Windows ili Unix sistem?

Na Unix sistemima postoji curses.h header fajl koji sadrzi getch() funkciju, koja se poziva nakon poziva noecho() funkcije.

Na Windowsu trebas da ukljucis conio.h i onda koristis getch(). getch() podrazumevano ne ispisuje karaktere, postoji i getche() koja ispisuje.

Dopuna: 23 Feb 2011 9:38

Vezano za ovo sto je Srki_82 predlozio, postoji unos u FAQ na comp.unix.programmer listi:

http://www.faqs.org/faqs/unix-faq/programmer/faq/

Potrazi pod:3.1 How can I make my program not echo input?

offline
  • Senor  Male
  • Ugledni građanin
  • Uroš Stegić
  • Pridružio: 19 Jul 2006
  • Poruke: 308
  • Gde živiš: Pančevo

@soxxx
U pitanju je linux (unix) programiranje. Jel te dve funkcije imaju argumente? Jel možeš da mi daš primer toga?

@Srki_82
Nisam znao za funkciju getpass, u kojem je ona zaglavlju, stdio.h?

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Dodaj samo #include <unistd.h>

Ovde imaš i kratko objašnjenje: http://linux.about.com/library/cmd/blcmdl3_getpass.htm

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Napisano: 23 Feb 2011 16:16

getpass() je izbacen iz POSIX standarda jos 2001 godine, mada ljudi i dalje koriste tu funkciju.

@Senor

Evo jednog primera, pitaj ako nesto nije jasno:
#include <stdio.h> #include <stdlib.h> #include <termios.h> #include <string.h> int main(int argc, char **argv) {     struct termios oflags, nflags;     char lozinka[64];     /* Postavljamo terminal atribute        tcgetattr():   tcgetattr - get the parameters associated with the terminal             http://pubs.opengroup.org/onlinepubs/009695399/functions/tcgetattr.html        fileno():   fileno - map a stream pointer to a file descriptor             http://pubs.opengroup.org/onlinepubs/007908799/xsh/fileno.html     */     tcgetattr(fileno(stdin), &oflags);      // Cuvamo parametre u oflags     nflags = oflags;     nflags.c_lflag &= ~ECHO;         // "gasimo" flag koristeci bitwise AND & i bitwise NOT ~       /* Ucitavamo izmenjene parametre       tcsetattr():   tcsetattr - set the parameters associated with the terminal             http://pubs.opengroup.org/onlinepubs/009695399/functions/tcsetattr.html       TCSANOW == Postavi izmene odmah    */     if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {        perror("Greska: tcsetattr poziv nije uspesan!");      return EXIT_FAILURE;     }     printf("Ukucajte lozinku: ");     fgets(lozinka, sizeof(lozinka), stdin);      // Uzimamo karaktere     lozinka[strlen(lozinka) - 1] = 0;         // Uklanjamo line feed     printf("\nVasa lozinka je: '%s'\n", lozinka);     /*         Vracamo terminal u predhodno stanje     */     if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {       perror("Greska: tcsetattr poziv nije uspesan!");       return EXIT_FAILURE;     }     return 0; }
Evo koriscenja (testirano na Cygwin):
$ gcc -o noecho PassNoEcho.c $ ./noecho.exe Ukucajte lozinku: Vasa lozinka je: 'habahabahaba'

Dopuna: 24 Feb 2011 22:09

@Senor

Izvini, ostao sam ti duzan za getch() verziju iz ncurses.h. U gornjem primeru smo koristili termios.h kako bi direktno manipulisali sa terminalom. Ako na svom distrou nemas instaliran ncurses, onda, recimo za Ubuntu, treba da instaliras libncurses5-dev paket.
Kako bi linkovao ncurses, program kompajliras sa:$ gcc -o nopassecho -lncurses nopassecho.c
Ovoga puta bez komentara, ali program radi tacno ono sto ti treba:
#include <stdio.h> #include <string.h> #include <ncurses.h> #define MAXBUF 64 int ch = 0, i = 0; char lozinka[MAXBUF] = {0}; int main(void){         initscr();         raw();         noecho();         printw("Unesite lozinku: ");         while((ch = getch()) != 0 && ch != '\n' && strlen(lozinka) < MAXBUF -1){                 lozinka[i++] = ch;                 printw("*");         }         lozinka[strlen(lozinka)] = '\0';         printw("\nVasa lozinka je \"%s\"", lozinka);         getch();         endwin();         return 0; }

Ako nisi upoznat za ncurses programiranjem, pogledaj ovaj tutorijal: http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

Ko je trenutno na forumu
 

Ukupno su 619 korisnika na forumu :: 10 registrovanih, 1 sakriven i 608 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: bojank, darkojbn, draggan, dragoljub11987, Koridor, Milometer, MilosKop, Mixelotti, Shilok, slonic_tonic