getch ()
Simon Štriker
simon.striker at telemach.net
Wed Sep 24 21:27:34 CEST 2003
Živijo!
> Žal, še sam nisem pisal kaj takega, tako, da ti teško pomagam. vendar se
> zdi rešitev, da ne bereš gesla iz stdin pač pa tpkovnico preusmeriš v
> kak drug (svoj) stream.
>
> Prosim, sporoči, kako boš rešil.
Jaz sem se še vedno ubadal s primerno rešitvijo v Linuxu in končno mi je le
uspelo. Torej znotraj programa sem uporabil funkciji initscr( )
in noecho( ). Nato sem moral pred vsakim izpisom na zaslon (pre uporabo
cout) uporabiti še funkcijo refresh ( ). Na koncu (po vnosu gesla) pa sem
dodal funkcijo endwin ( ), ki vbistvu zapre ta "začasni" screen. Potem
program deluje normalno.
En delcek izvorne kode za lazjo predstavo:
#include <iostream>
#include <curses.h>
#include <stdlib.h>
using namespace std;
int main ()
{
system("clear");
initscr( );
noecho( );
char password[]="toJEgeslo";
char password1[6];
refresh( ); //Potrebujem, da mi izpiše spodnja dva "niza"
cout << "Imenik naslovov\n";
cout << "\nVnesi vstopno geslo: ";
password1[5]='\0';
for (int i=0;i<5;i++)
{
refresh( ); //Potrebujem, da mi izpisuje * ob vnosu gesla
password1[i]=getch ( );
cout << "*";
}
endwin( );
---------------------------------------------------------------------
Stvar mi sedaj deluje približno tako, kot sem si zamislil. Edina težava se
pojavi ob izpisu zgornjih dveh nizov: "Imenik naslovov" in pa "Vnesi vstopno
geslo: ". Problemček je v tem, da mi drugi niz med izpisovanjem na zaslon
zamakne v desno za širino prvega niza. Primer izpisa:
Imenik naslovov
Vnesi vstopno geslo:
Problem je verjetno v funkciji refresh( ). Vendar sem to težavo začasno
rešil z for zanko, v kateri sem izpisal znak \b, ki mi drugi niz premakne za
dolžino prvega v levo. - rešitev je začasna, dokler ne ugotovim, v čem je
težava.
Lep pozdrav, Simon
Simon Štriker
Rusjanov trg 2
1000 Ljubljana 041/473-856
More information about the lugos-prog
mailing list