Newsgroup: it.comp.lang.c++
Titolo: Stream

Il mio dubbio è questo:
Quando scrivo cin >> qualcosa; in pratica è come scrivere leggi i dati che
arrivano dalla tastiera e mettili nella variabile qualcosa!Giusto?
Ora io ho questo pezzo di codice:
f = char;
while (  ( f = cin.get()  ) != EOF )
 cout.put ( f );
Quel che mi aspettavo era che finche cin.get() non incontrava il carattere
di fine file EOF dovevo continuare a scrivere un carattere che sarebbe stato
immediatamente visualizzato sul monitor!
Invece quel che succede è che io scrivo quel che voglio e quando premo
invio, il programma riscrive tutto sotto,lettera per lettera!
Da quel che ho letto get senza argomenti effettua l'input di un carattere
dallo stream indicato e restituisce il carattere letto!
Mi spiegate perchè il programma si comporta così?
Lo stream di input non è la tastiera?
Help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ciao a tutti e grazie a chi mi risponderà!
Francesco

 invio, il programma riscrive tutto sotto,lettera per lettera!
Perche lo stream di input e' bufferizzato e la lettura avviene, di
fatto, riga per riga.
Ciao,
Nicola

 > Invece quel che succede è che io scrivo quel che voglio e quando premo


Qualcuno mi potrebbe spiegare come funziona l'I/O in C++!
Quel che ho capito è che lìI/O si basa sugli stream, che altro non sono che
flussi di byte i quali possono andare: da un dispositivo alla memoria nel
caso dell'input, o dalla memoria ad un dispositivo nel caso dell'output!
Per effettuare, per esempio, l'uotput di un dato sul monitor si usa
l'oggetto della classe iostream "cout" :
cout <<"ciao"; manda in output "ciao",in effetti non viene visualizzato
immediatamente ammeno che il buffer non sia  pieno o che non se ne forzi lo
svuotamento!
Io però non capisco cosa vuol dire che "ciao" deve essere inviato sullo
stream di output!
Io pensavo che per stream si intendesse proprio la stringa "ciao", ma
evidentemente sbaglio,perchè!
Grazie mille in anticipo a chiunque risponda!!!!
Ciao
Francesco!

 evidentemente sbaglio,perchè!
mmm... mi sa proprio di no... lo stream non e' una variabile (lo so che 
"stream" e "string" suonano simili :-) ), lo stream e' una specie di 
canale, e' un flusso di dati....

 ha scritto nel messaggio
news:aea8et$df6$1...@lacerta.tiscalinet.it...


 ha scritto nel messaggio
news:FM5O8.10764$j65.2...@twister1.libero.it...


 evidentemente sbaglio,perchč!
si, in effetti sbagli :-)
Nell'espressione
        cout << "ciao";
lo stream (di output) e` cout mentre il dato inviato allo stream e` 
"ciao".
Forse se la vedi in questo modo e` meglio: la traduzione in italiano di 
stream e` "flusso" o "canale": immagina che 'cout' sia un "canale" che 
trasporta i dati dalla memoria al dispositivo di output (che in genere 
e` il monitor).
Il programmatore usando l'operatore << e` come se "infilasse" nel canale 
i dati che vuole stampare, poi e` quest'ultimo che si occupa di 
effettuare la stampa vera e propria.
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 ha scritto nel messaggio
news:aecrdv$se3$1...@newsreader.mailgate.org...


collegato, per esempio, cout!
È il sistema operativo, cout si limita a dire al sistema operativo
sottostante "stampa sullo standard output". Non è detto che cout si
riferisca al monitor (potrebbe anche non esserci un monitor).
Puoi quotare decentemente? Dovresti cioè rispondere sotto il messaggio
tagliando le parti superflue.
-- 
Marco Barisione (ICQ 84277092)

Sempre sulla questione stream,mi spiegherebbe qualcuno per quale motivo,con
quale criterio,viene chiamata l'immissione di dati dalla tastiera, nel caso
di più istruzioni cin? Faccio un esempio per essere più chiaro
char a;
cin.get(a);
cout.put(a);
cin.get(a);
cout.put(a);
è un esempio stupido, ma mi serve per capire il funzionamento  di cin e
cout!
Perchè mai con un codice di questo tipo mi chiede solo una volta
l'immissione di dati dalla tastiera?
Ciao e grazie
Francesco

 dispositivo a cui è collegato, per esempio, cout!
non e` preciso. std::cout e` collegato al dispositivo di "standard 
output"; in genere lo standard output e` proprio il monitor, ma potrebbe 
essere anche un'altro dispositivo, come ad esempio un file.
Detto questo, e` il sistema operativo che si occupa della comunicazione 
con l'hardware; lo streambuf collegato a cout in genere si limita a 
chiamare le funzioni offerta dall'OS per scrivere sullo standard output, 
ma std::cout di per se` non sa se andra` a scrivere sul monitor, su un 
file, su una stampante, ecc.
