Newsgroup: it.comp.lang.c++
Titolo: Input di una stringa

    Visto che in altri messaggi mi avete dato ottimi consigli su come
lavorare con le stringhe
mi dite qual č il modo piu' comodo di chiedere una stringa in input?
E poi, io conosco solo cin.get() per avere un carattere, ma cosě essendo
bufferizzato devo dare anche invio, se io volessi invece avere solo il
carattere senza aspettare che l'utente dia invio?

 wrote in message 85dsah$125$1...@nslave2.tin.it...
:     Visto che in altri messaggi mi avete dato ottimi consigli su come
: lavorare con le stringhe
: mi dite qual è il modo piu' comodo di chiedere una stringa in input?
#include <string>
...
std::string s;
cin >> s;
: E poi, io conosco solo cin.get() per avere un carattere, ma così essendo
: bufferizzato devo dare anche invio, se io volessi invece avere solo il
: carattere senza aspettare che l'utente dia invio?
char c;
cin.read(&c, 1);
--
____ __         __,_      __  _____
\  _\_ \  ___ _/ / /\  /\/  \/ / _/ It is better to reign in Hell
 \  _ \ \/ _ '/ , |\ VV / / / / _/ Than serve in Heaven.- MILTON
  \_,_/\_\_,_/_/|_| \__/\__/_/_/
      -- the one and only --     e-mail : 
blak...@tiscalinet.it
                                ICQ    : 59394345
The UNIX Guru's View of Sex:
$unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

 carattere senza aspettare che l'utente dia invio?
Purtroppo, il C++ non fornisce un modo standard di realizzare il
compito che desideri.  Anche il controllo sul "buffering" che esso
ti permette non tocca in realta` quanto il sistema operativo e i
suoi driver stiano facendo sui caratteri digitati dall'utente.
Per ottenere questa funzionalita`, devi operare dunque in modo
dipendente dalla piattaforma.  Ti consiglio, dunque, di chiedere
sul gruppo relativo alla piattaforma di tuo specifico interesse,
come, ad esempio, it.comp.programmare.win32.
Alex

     getline(cin,laStringa);
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 cin.read(&c, 1);
Questo invece, e inserisco un tono dubitativo proprio per farti
personalmente contento, mi *SEMBRA* completamente errato.
Lo standard definisce sia istream.read, sia istream.get, come
"unformatted input functions" la cui funzionalita` e` descritta
in termini di "estrazione" di caratteri; al netto, non mi *SEMBRA*
che lo standard *AMMETTA* nessuna *CONCEPIBILE* differenza
di funzionamento fra le due funzioni:
    char get1(std::istream& ist) {
        return ist.get();
    }
    char get2(std::istream& ist) {
        char c=EOF;
        ist.read(&c, 1);
        return c;
    }
e certamente non la specifica funzionalita` richiesta da
CladNews (che, ribadisco, si puo` ottenere solo in modi
tipici delle diverse piattaforme).
Alex

 Qui ci metterei un flush ...
Male non puo` fare, ma non sara` neppure mai necessario (std::cin e
std::cout sono infatti necessariamente tie'd, a norma dello standard!)
Alex

 mi dite qual č il modo piu' comodo di chiedere una stringa in input?
  std::string s;
  std::istream in;
  in >> s;    // legge una parola delimitata da spazi
  std::getline( in, s );  // legge una riga
	Mauro

carattere senza aspettare che l'utente dia invio?
Non credo esista un metodo che funzioni su tutte le piattaforme, per cui il
professore potrebbe storcere un po' il naso qualora tu usassi qualcosa di
non standard.
Saluti,
    Mardy

 Io penso che usero' cin.getline(). Magari con un limite di 50 caratteri?
;-)
Quale vantaggio potrebbe mai presentare, visto che std::getline (la
funzione) di limite non ne presenta nessuno?
E` un vero peccato che per ragioni storiche restino tracce nella
libreria standard c++ dell'antico uso degli array di caratteri al
posto di vere stringhe.  Adesso che le stringhe ci sono, meglio,
ovviamente, usarle.
Alex

 cin.read(&c, 1);
No, non funziona come dici tu. Non esistono metodi standard per leggere
un solo carattere senza dover premere anche l'INVIO.
EMG

ovviamente, usarle.
Certo. Ma purtroppo il nostro professore non ne ha ancora parlato, e non
credo di usarle nel progetto, visto che ancora non le conosco e che per quel
poco di manipolazione che mi e' richiesta l'uso di array di caratteri e' ne'
piu' ne meno di quel che serve.
A parte l'uso degli operatori "<<", ">>" e poche altre cose, il nostro corso
e' stato nei fatti un corso di C, che gia' conoscevo. Il tempo a
disposizione e' purtroppo limitato: credo sia impossibile imparare il C++
senza imparare il C, e la parte OO del linguaggio ci sara' spiegata nel
secondo semestre.
Saluti,
    Mardy