Newsgroup: it.comp.lang.c++
Titolo: cin nascosto

Ciao a tutti,
sto scrivendo un client FTP in C++, e mi e' sorto un dubbio:
Al momento di chiedere la password, come faccio a farla prendere da cin senza
che sia visualizzata a video? esiste sicuramente una funzione standard, 
ma non ho proprio trovato nulla...
ecco la parte di codice interessata:
pwd = new char[30];
assert(pwd != 0);
cout << "Password: " ;
cin >> pwd;		// e qui quando l'utente digita la pwd viene visualizzata a video!!
comd = new char[strlen(name) + 7]
assert(comd != 0);
strcpy(comd, "PASS ");
comd = strcat(comd, name);
comd = strcat(comd, "\r\n");
control.set_snd_buf(comd);
delete comd;
delete name;
control.sending();
tnx to all
gabo


Ti scongiuro, usa 'std::string'. Guarda, mi metto in ginocchio. Cos'altro
devo fare?
Max

 devo fare?
nulla gli uncecked buffer si vanno a cercare apposta ;-) seno' non si
potrebbe poi obbligare a patch e cosi' via ... ;-) (MS stile docet :-p)
ciao

 ma non ho proprio trovato nulla...
L'unico modo che mi viene in mente è quello di usare getch() della libreria 
C "conio.h", puoi fare quindi una cosa del genere:
int main()
{   char in;
    char pwd[10];
     for (int i=0; i<10; i++) {
        in = getch();
        std::cout << "*";
        pwd[i]=in;
	}
  std::cout << "\npwd:" << pwd << std::endl;
   system("PAUSE");	
   return 0;
}
------OUTPUT:
**********
pwd:hgfhgjfkdk
Premere un tasto per continuare...
-----------------------
Ciao, Checco.

 devo fare?
So di essere in errore, ma sono un newbe, arrivo dal C ed ho un client FTB
da implementare dal nulla... Mi sn studiato tutto il Deitel&Deitel "C++
fondamenti di programmazione" (dove sono usate le stringhe standard del
C)(650 pag. aarghh!!), ed ho in libreria il volume "Tecniche avanzate di
programmazione", dove e' trattata la std::string, ma il tempo stringe,
l'esame si avvicina, e alla fine ho dovuto scrivere un ibrido C/C++...
Al piu' presto la STL sara' stampata nel mio cervello (o in quello che
rimane di esso) e la smettero' con domande stupide...
sorry :))
gabo
P.S.
in std::string c'e' un modo per fare cio' che devo fare?



Grazie mille, mi sa che faro' proprio cosi'...
gabo

 in std::string c'e' un modo per fare cio' che devo fare?
Cosa? Leggere una stringa da std::cin, sì. Disabilitare l'echo della
console, no.
Max

 Max



Scusa, ho provato ad usare il tuo codice, ma mi sa che la libreria conio.h
e di winzozz... o perlomeno non c'e' sul mio linuzzo!
Cmq m sa che adesso m sposto su programmare.linux e vedo un po' come
modificare lo standard output, in modo da non visualizzare un bel nulla!!
grazie comunque


Ho buttato giu' due line di codice che potrebbero risolvere il tuo problema.
Il funzionamento e' analogo a 'cin' ma nasconde echo visualizzando '*'
Il nome dell'istanza e' 'cinh' e l'ho inserita nel namespace std::
(sacrilegio)
namespace std
{
class cinh_streambuf : public std::streambuf
{
   char keybuf;
public:
   cinh_streambuf()
   {
      setg(&keybuf,&keybuf,&keybuf);
      keybuf = 0;
   };
   virtual int_type underflow()
   {
      keybuf = (char) getch();
      if ( keybuf != '\r' )
         putchar('*');
      setg(&keybuf,&keybuf,&keybuf+1);
      return *gptr();
   }
};
cinh_streambuf cinh_instance;
std::istream cinh(&cinh_instance);
}
int main()
{
   std::string text;
   int value;
   std::cinh >> text;
   std::cout << text;
   std::cinh >> value;
   std::cout << value;
}
Ciao
Fabio



Ora sto lavornado alla tesi e mi hanno costretto a sviluppare sotto 
windows, ma ricordo di aver usato getch anche sotto linux, mi sembra che la 
libreria C fosse <curses.h> o qualcosa del genere... ma sotto linux prova 
direttamente con il comando "man getch", ti dice anche che include devi 
fare.
Mi dispiace ma ora non ho tempo per reboottare e passare a linux per fare 
delle prove, anch'io ho delle scadenze per la mia tesi...Fammi sapere.
Checco.
P.S.
Sempre se non ricordo male nella stessa libreria ci sono anche noecho() ed 
echo(), sempre di C però.