LA NUOVA GERUSALEMME
Qui si costruisce la NUOVA GERUSALEMME grazie al SECONDO TESTIMONE e UNTO, GESU' vi aveva avvisati del mio arrivo ovvero l'arrivo del FIGLIO dell'UOMO, Gesù stesso ha detto che non lo vedete mai più da Giovanni 16,10 "LA GIUSTIZIA" da cui leggiamo ( 10La giustizia sta dalla mia parte, perché torno al Padre e non mi vedrete più.) Lui stesso manda lo Spirito Santo che è il VERO Figlio dell' Uomo . Il vero Figlio dell' Uomo è descritto in Apocalisse 1, 12 ecc.. Io uso la Bibbia Interconfessionale, diversamente cito altri testi. >>> Pace e Bene dal Figlio dell'Uomo <<<
 
Pagina precedente | 1 | Pagina successiva

14) Input e Output del C++ approfondimenti su stream cout ecc…

Ultimo Aggiornamento: 27/10/2016 23:36
Autore
Vota | Stampa | Notifica email    
OFFLINE
Post: 257
Post: 246
Registrato il: 02/03/2016
Registrato il: 03/03/2016
Sesso: Maschile
26/10/2016 18:17
 
Quota



In C era possibile formattare il testo tramite i printf () ,scanf() mentre qui con cout e cin non possiamo fare nulla,  invece si, scrivete nel compilatore cout .  e esce fuori una bella lista di funzioni metodi ecc…,   questa lista serve proprio per accedere alle formattazioni del testo ecc.…  e non solo,  la nuova libreria input e output è sostenuta dal file header iostream che opera dentro il namespace std;  per prima cosa ricordiamo che cosa sono i stream  ,  è il flusso dei dati che vanno e tornano, dati che vanno dal pc alla stampante , oppure dati che dalla tastiera vanno al pc, altri dati che dal disco fisso li passiamo alle chiavette usb ecc.…, tutti questi dati sia file testo che file binari  sono i stream  e tutti questi hanno in comune che sono  input e output
dello stream e  sono sotto il controllo del preprocessore che è i file header iostream qui in C++, mentre prima era comandati nel vecchio C dal file header stdio.h



Già con l’ inserimento   del comando #include<iostream> ora e prima con <stdio.h > vengono aperti automaticamente 3 sistemi di stream  che sono stdin, stdout, stderr ,
dove std sta per standard, invece  in = input ingresso,  err= error  errori, out= output uscita , ma il vero significato della parola  è produzione , in input abbiamo quello che entra ovvero dati che entrano verso il computer, quando leggiamo un cd o dvd o quando scriviamo sulla tastiera quello è input , quello che scriviamo dentro un cd o dvd oppure la stampa di un foglio o la stampa su video, ovvero tutto quello che va dal computer verso le periferiche  quello è outputl’ errori sono i messaggi che riceviamo e questi sono scritti da  cerr<< , l’output lo
scriviamo con cout<< e l’ input lo scriviamo con cin<<, questi comandi e altri  come leggere
creare  i file con fopen ecc.…  sono tutti stream, tradotto stream vuol dire ruscello o corrente, infatti corrente luce o dati che corrono verso le periferiche come una corrente di un fiume grazie i bus che sono i cavi  interni del computer che collega le varie periferiche al pc ,  per parlare di dati parliamo di flusso  stream è il flusso di dati  I/O che va e viene verso il microprocessore  del pc       



Sotto il preprocessore, che sono i file header, supporta queste operazioni di I/O specialmente
nel nuovo header iostream che legge tutta la lista di tutti i file header, (vedete dentro l’ esplora soluzioni del compilatore (ctrl+alt+L), dentro i file (dipendenze esterne) li vedete tutta la lista dei file header caricati dentro il programma), praticamente sono caricati tutti i file header , il nostro sistema I/O si basa su delle classi template la nostra classe che useremo di più deriva dalla classe principale basic_ios, e si chiama ios_base se aprite la guida del compilatore e nell’ indice si scrive ( ios_base) poi scegliete classe e non metodo li nella classe si vede tutta la lista delle funzioni e metodi adottati da questa classe con le rispettive descrizioni  



Comunque esiste 3 tipi  di classe principali  le classe template che fa capo al (basic_nome) esempio basic_ios, poi c’è la classe per caratteri estesi che come inizio è sempre (wnome) wios  inoltre c’è la classe per caratteri semplici  con nome ios oppure come nella guida ios_base   i nomi di queste classi I/O che nascono da ios_base sono : fstream, ifstream, ios, iostream, istream, istringstream ofstream, ostream, ostringstream, streambuf  e stringstream,  ecco una tabella della CNR di bologna,  da base_ios nasce ios, da ios nasce istream e ostream,  da istream abbiamo  istringstream,  ifstream e iostream, da ostream nasce iostream, ofstream e ostrnstream   da  iostream nasce  fstream e stringstream come detto prima per accedere ad i stream in C++ abbiamo cin>> per la tastiera e per il video abbiamo cout<<,cerr<<, clog<< (simile a cerr<< ma con buffer completo) poi ci sono la versione caratteri estesi wide che inizia con anziché  con  c pertanto abbiamo  win, wout, werr,wlog  per formattare i nostri testi dobbiamo usare i comandi allegati alla classe  di  ios_base  per i stream cout<<,cerr<<, clog<< e cin>>   per la lista completa dei membri della classe come detto vedere la guida del
compilatore ( F1 in indice cercare ios_base, poi aprite su (classe) c’è tutta la lista e il significato di ogni parola chiave nelle parole chiave con il nome in italiano non è quella aprite il collegamento e vedete il vero nome  come binaria è binary ma vi porta dentro openmode,  ugualmente anche nella guida online in internet )



Ora vediamo come si accede alla classe ios  per attivare le formattazioni che ci serve la
funzione  setf()  che attiva le formattazioni , la sua sintassi è:  stream.setf(classe::flag);  lo stream come detto è cin, cout , ecc…  setf sta per settare i flag   la classe deve essere una delle classi dello stream  fstream, ifstream, ios, iostream, istream, ofstream, ostream, streambuf ,   il flag è la lista che si apre quando usiamo l’ operatore di scope ( :: ),   per attivare setf() dopo lo stream. ,dopo il punto si apre la lista delle classi e funzioni dove possiamo scegliere anche la
funzione  setf() un esempio per usare un numero scientifico  usiamo prima la formattazione   cout.setf (ios::scientific);  poi facciamo seguire il numero che dobbiamo formattare cout<<12.33;  abbiamo il risultato a schermo il numero scientifico   1.23300000e+01  se desideriamo formattare più cose possiamo farlo utilizzando  l’ OR |  cosi possiamo scrivere 2 istruzioni o più con un solo cout.setf(ios::showpoint | ios::showpos  | ios::ecc..);   ora consideriamo che   non mi serve  il segno + positivo inserito da showpos d’avanti i numeri positivi,  io allora posso eliminare questa istruzione con  la parola unsetf() che provoca la disattivazione dei flag si scrive :   cout.unsetf(ios::showpos);  … poi segue il numero successivo cout <<70; cosi il simbolo + d’avanti il nuovo numero è disattivato



Tramite l’ overload  possiamo modificare la forma di setf ()  vediamo in dettaglio e guardare dopo la virgola ,classe::flagx dove flagx deve essere uno dei flag precedenti alla virgola, esempio se flagx è flag1 solo questo flag1 viene attivato , possiamo anche avere più flag anche qui divisi dall’ OR | classe::flag2  in questo caso entrambi i flag sarebbero accettati   :



stream.setf(classe::flag1 | classe::flag2 , classe::flagx | classe::flag2 );



Un esempio pratico showpos inserisce un segno (+ più ) verso i numeri positivi ,mentre showpoint inserisce dei zeri dopo un numero  reale con la virgola ecco un piccolo programma
f sta per funzione  fa, fb, ferase, fexit  chi copia il mio programma deve inserire (using namespace sts;) per il resto può rimanere cosi oppure dopo ogni ; e } si va a capo  in una nuova linea il programma  scrive e inizializza  4 numeri 1 intero e 3 double, le 4 variabili sono inserite nella parte globale  , poi li facciamo stampare su video e in seguito mettiamo i flag, poi ristampiamo i nuovi risultati, questo è uguale per le 2 funzioni  fa(), fb()  , con ferase() si annulla il settaggio dei flag di fa() in modo che fb() sia di nuovo con i numeri iniziali delle 4 variabili iniziali globali se non c’è la funzione ferase() è possibile vedere che i nuovi numeri sono stampati come all’ uscita della funzione fa(), per togliere  ferase() basta inserire il commento /*
ferase()*/fexit() serve per uscire dal programma, guardare la posizione / chiamata delle 4 funzioni dentro il vero programma   int main() { fa ();  ferase ();  fb (); fexit ();  } ,  ecco il programma sviluppato nell’ esecuzione confrontate i dati che sono dentro le righe :



#include<iostream>  using namespace std; 

int a = 12;    double b = 177.100, c = -100.12,  d = 1.8;



void fa (); void ferase (); void fexit (); void fb (); 
  
   int main ()  { 

fa
();  ferase ();  fb (); fexit (); }



void fa () { 

    cout << "-- A Numeri inseriti:
" << "\n " << a << " // " << b
<< " // " << c << " // " << d
<< " risultato:\n" << " -------------------------------------------------------";



    cout.setf (ios::showpoint | ios::showpos,ios::showpos | ios::showpoint);



    cout << "\n >>> " << a << " * " << b << " * " << c << " * " << d << " <<<\n"<<" -------------------------------------------------------"; 

    cout << "\n prodotto dall'algoritmo:\n [cout.setf (ios::showpoint | ios::showpos \n  ,ios::showpos |ios::showpoint);]\n\n";           } 



void ferase () {   cout << "\n<> Cancelliamo l' algoritmi precedenti con l'istruzioni<>: \n      [cout.unsetf (ios::showpoint | ios::showpos);]\n\n" ;   cout.unsetf (ios::showpoint | ios::showpos);      }



void fexit ()    {cout  << "\n ByMpt-Zorobabele\n Uscita
(premere un tasto + invio): "; char zx; cin >> zx;       }



void fb () { 

    cout << "-- B Numeri inseriti: " << "\n " << a << " // " << b << " // " << c << " // " << d
<< " risultato:\n" << "
-------------------------------------------------------"; 

    cout.setf (ios::showpoint |ios::showpos,ios::showpos);



    cout << "\n >>> " << a << " * " << b << " * " << c << " * " << d << " <<<\n
-------------------------------------------------------\n";



    cout << "\n prodotto dall'algoritmo:\n [cout.setf (ios::showpoint | ios::showpos,ios::showpos );]\n
come possibile vedere e' attivo solo showpos \n con il + nei numeri positivi
\n";          }



Vediamo alcuni flag e il loro utilizzo :  adjustifield racchiude  internal, left , right, dove left e right  inserisce caratteri di riempimento  left riempie la sinistra , right riempie la destra  e internal riempie il centro del campobasefiel racchiude dec, hex e oct  rispettivamente  inserisce o estrae  i valori numerici in formato decimale, esadecimale e ottale  floatfield racchiude  fixed e scientific inserisce i valori in virgola  mobile , in formato virgola fissa o formato scientifico ovvero con o senza il campo dell’ esponente boolalpha inserisce o estrae  oggetti di tipo bool  true o false anziche i numeri 0 negativo o altri positivi showbase  inserisce i prefissi per i numeri ad esempio se si utilizza un numero esadecimale prima del numero inserisce 0x la base esadecimale     showpoint  inserisce in modo non condizionale un punto
decimale in un campo a virgola mobile ovvero tratta i numeri in diversi modi  1 quintale è  100 chili ma è anche 0.1 tonnellate , sono anche 1000 ettogrammi   showpos  inserisce in un
campo positivo il segno + skipws  elimina i spazi vuoti iniziali , se skipws() è uguale a 0 i spazi vuoti non vengono eliminati  unitbuf scarica l’ output dopo ogni inserimento  uppercase cambia le scritte minuscolo in maiuscolo   n  uppercase N



Se desideriamo conoscere la posizione o meglio situazione dei flag se sono attivi o meno senza modificare il loro stato, ios ci mette a disposizione una funzione che ci riconsegna  un  numero intero (long) esadecimale con la base corrente di ogni flag 1 attivo 0 non attivo  oppure true  o false , la funzione è flags() e il suo formato  è fmtflags flags();  con   ios::fmtflags f;  in f abbiamo lo stato in cui si trova il flag  che  come detto può essere un numero  di tipo long 
0  o 1  il fmtflags è un typedef e riconosce solo i suoi “membri” che è la lista dei tipi dei flag  
copio una funzione per leggere questo stato di tutti i flag  la funzione leggi_stato_flag{ con  il comando  ios::fmtflags riconosce i tipi di typedef e in f legge lo stato dei flag con f=(long) ) cout.flags();    , con la variabile  long i;   si crea il ciclo per leggere tutti i flags for (i=0x4000; i;  i=i >> 1)  con >> 1 si presume che di fare controlli di bit a bit infatti si usa il controllo   if (i & f ) cout<<”  true 1 ”; else cout<<”  false 0  “;    &  and a bit , se  i e f sono uguali scrivi  true 1  altrimenti false 0, ecco la funzione prototipo  :



leggi_stato_flag  {( ios::fmtflags f;   long  i; f=(long) cout.flags();  



for (i=0x4000; i;  i=i >> 1)     if (i & f ) cout<<”  true 1 ”; else cout<<”  false 0  “;   
cout<<endl;  }



Un altro modo di accedere nei flags potrebbe essere in modo indiretto per mezzo di una variabile ( long f ) la stessa variabile che abbiamo visto su dal comando ios::fmtflags f;  anzi che chiamare con  cout.setf(ios::nome_flag |  ecc..) ; possibile chiamare in causa la variabile (long f  )  riconosciuta da  fmtflags  ecco una prototipo con la chiamata diretta tramite la funzione flags(f); cosi abbiamo attivato ugualmente i vari flags, importante  la variabile f long e la chiamata tramite cout.flags(f) altrimenti non funziona nulla, controllate con la funzione prima espressa :



long f= ios::showpos | ios::showbase | ecc… ;      cout.flags(f);



ecco il programma  che racchiude le 2 forme  di attivare i flags, poi il metodo per controllare i stessi flags attivi o meno alcuni saranno attivati all’ inizio ma poi saranno disattivati :



#include<iostream>  using namespace std;



void leggi_flags ();  int main (){



    cout << " Prima di attivare i flag solo 2 sono attivi, poi si \n disattivano perche' se si sceglie un controllo non e'\n possibile scegliere l'altro, come esempio si deve scegliere;
\n un numero decimale esadecimale oppure ottale \n\n ";     leggi_flags ();  



    long f = ios::showpos | ios::showbase | ios::oct | ios::right;  cout.flags (f);



    cout << "\n\n Dopo di aver attivato i primi 4 flag \n\n";     leggi_flags ();



    cout.setf ( ios::showpoint | ios::fixed);



    cout << "\n\n Dopo di aver attivato tutti 6 flag \n\n";     leggi_flags ();



    cout << "\n\n ByMpt-Zorobabele\n
Per uscire [premere un tasto + invio]: "; char zx; cin>> zx;      }



void leggi_flags ()  { ios::fmtflags f;  long i;    f = (long)cout.flags ();



    for(i = 0x4000; i; i = i >> 1)  if(i & f) cout << " 1 True ";
  else cout << "
0 False ";  cout << " \n"; }



Altri 3 comandi o meglio funzioni che servono per la formattazione del video output  con width() si specifica un’ampiezza minima di un campo  si usa con  stream.width(n);   lo stream è cout,  (n)  è il numero dell’ ampiezza che si desidera se n è 12  e dobbiamo scrivere un numero 1
il numero 1 rimane nel 12mo carattere, se il numero era 500.000 l’ ultimo 0 rimane nel 12mo spazio tutto quello prima del numero 5  rimane spazio vuoto nel caso che il nostro numero supera l’ ampiezza il numero non viene troncato, con   stream.fill(‘ch’); possiamo riempire con un carattere lo spazio vuoto  cout.fill(‘*’);  nei spazi vuoti creati da width () inseriamo il carattere specificato da (‘ch’) dove nel nostro caso nell’ esempio  è l’ asterisco *  , nel nostro caso il numero 1 con width(12); avremo 11 stellette poi il numero 1 , nel caso il numero era da 5 cifre avremo avuto 7 stellette più il numero  stream.precisi0n(n) questo comando Specifica il numero di cifre da visualizzare in un numero a virgola mobile  cosi taglia  (n)  di cifre  di solito la precisione standard è impostata a 6 cifre dopo il numero intero cosi di tutto quel numero  può essere tagliato, con un numero tagliamo l’ eccesso del numero su un numero di 6 cifre 100.203 se impostiamo (3) rimarremo solo con 100  e se il numero è più piccolo (2) avremo un numero di 1e+02  in altre parole , se il numero è fixed  il (n) conta (n) dopo i decimali , con lo scientific con (n) viene tagliate anche le cifre significative  questi comandi sono validi solo per il primo stream d’ output  che incontra, pertanto nel prossimo (cout<<) non ha effetto queste
istruzioni fill(‘*’); width(n);precisi0n(n); n sono sempre numeri interi



Ciao grazie da ByMpt-Zorobabele 

Testo PDF aggiornato con questo ultimo capitolo  inserito lo trovate :


http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx

Anche qui di queste discussioni che inserisco faccio un testo PDF da poter scaricare tutto il mio
materiale è da utilizzare come desiderate  per il testo PDF vedi cartella dedicata , ogni volta cambia ubicazione del testo  allora cambio il file e il testo lo inserisco dentro la cartella < file aggiornato ad oggi >



[Modificato da JehovaZorobabele 27/10/2016 23:36]
Vota: 15MediaObject1,36191
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum

Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Crea forum gratis, gestisci la tua comunità! Iscriviti a FreeForumZone
FreeForumZone [v.6.1] - Leggendo la pagina si accettano regolamento e privacy
Tutti gli orari sono GMT+01:00. Adesso sono le 12:05. Versione: Stampabile | Mobile
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com