prof. Nunzio Brugaletta
C++: programmazione e oggetti

EnneBi - Programmazione
Avanti - Indietro - Inizio

Lo stream di output

Quando si parla di input o di output senza meglio precisare, si fa riferimento alle periferiche di default: nel caso specifico tastiera e video. Se si avrà necessità di utilizzare periferiche diverse si dovrà specificare esplicitamente.

Il sistema operativo fornisce una interfaccia ad alto livello verso l’hardware: le periferiche sono mappate in memoria, è utilizzata cioè, in pratica, una parte della memoria centrale (il buffer) come deposito temporaneo dei dati da e verso le periferiche. In questo modo, per esempio, le operazioni di output possono essere effettuate sempre allo stesso modo a prescindere dalla periferica: sarà il sistema che si occuperà della gestione della specificità dell’hardware. Il sistema di I/O fornisce il concetto astratto di flusso o canale (lo stream). Con tale termine si intende un dispositivo logico indipendente dalla periferica fisica: chi scrive il programma si dovrà occupare dei dati che transitano per il canale prescindendo dalle specifiche del dispositivo fisico che sta usando (il video, un lettore di dischi magnetici, una stampante). Lo stream di output, nel caso del video, è usato in maniera sequenziale: si possono accodare tutti gli output nel canale e il sistema provvede a stamparli uno di seguito all'altro.

// Programma per mostrare diversi modi di
// stampare su video

#include <iostream>
using namespace std;

int main()
{
  cout << "Prima riga ";	/*1*/
  cout << "seguito della riga" << endl;	/*2*/
  cout << "Nuova riga molto lunga"
          " la riga continua ancora su video"
          "\n questo viene stampato su una nuova riga" 
       << endl;	/*3*/

  return 0;
}

Se si compila, e si lancia l'esecuzione del programma, si ottiene:

Prima riga seguito della riga
Nuova riga molto lunga la riga continua ancora su video
 questo viene stampato su una nuova riga

Nella 1 si incanala (per mezzo dell'operatore di inserimento <<) nello stream cout la stringa Prima riga. Tutto ciò che è racchiuso fra e (il carattere doppio apice), come si nota nell'esecuzione, verrà visualizzato su video così come è. Il ; chiude l'istruzione.

Nella 2, nonostante si tratti di una nuova istruzione, la stringa, come si può notare nell'esecuzione, è visualizzata di seguito alla prima. Lo stream è utilizzato in modo sequenziale. Per andare a riga nuova si è accodato (operatore <<) il modificatore endl (end-line) che, appunto, termina la linea e fa passare alla prossima riga nel video.

L'istruzione 3 è suddivisa in più righe di listato. L'istruzione termina, al solito, con il ; e consente di distribuire il testo da visualizzare su più righe fisiche. In ognuna si è scritta una stringa racchiusa dai soliti caratteri: questo viene ... verrà visualizzata dopo Nuova riga... Per passare ad una nuova riga su video, si è utilizzato in questo caso il carattere di controllo \n dentro la stringa da visualizzare. Lo spazio successivo al carattere di controllo non è necessario ma è stato introdotto solo per evidenziarlo. In definitiva per poter passare alla linea successiva si può accodare allo stream di output endl o inserire nella stringa da stampare il carattere di controllo \n.

All'interno della stringa da stampare si possono inserire anche altri codici di controllo, tutti preceduti dal carattere di escape (\), di cui qui si fornisce un elenco di quelli che possono essere più utili:

L'esecuzione della istruzione di output presente nel programma di esempio:

...
cout << “\nBase: ” << base << “ Altezza: ” << altezza << endl;
cout << “Area: ” << area << endl;  

produrrebbe, nel caso fossero stati introdotti i valori 3 e 7 rispettivamente per base e altezza:

Base: 3 Altezza: 7
Area: 21

il primo output, come previsto dal codice di controllo presente verrà stampato una riga sotto l'ultimo output precedente.



Avanti - Indietro - Inizio

http://ennebi.solira.org
ennebi@solira.org