Tutorial – formattazione Output in C e C++

Il Problema

Nello scrivere e progettare programmi sia in C che in C++, lo sviluppatore sceglie se realizzare un programma che dovrà funzionare in Console o dovrà essere dotato di un’interfaccia utente a finestre, menù, pulsanti, ecc..
Nellla scelta di realizzare un programma che utilizzi la Console quello che viene definito il terminale, può essere a volte necessario predisporre una piccola formattazione di uscita talvolta che preveda la visualizzazione di certe parti di testo o sfondo a colori.
La gestione dei colori e la formattazione in termini di spaziatura è abbastanza complessa, in quanto il primo scoglio da affrontare e l’approccio diverso che occorre avere a seconda se li programma dovrà girare in una Console Windows / MS-DOS o in una console Linux/Unix/MacOSX in generale.

Approccio utilizzato

L’approccio che è esposto qui cerca di unificare la gestione di quest’aspetto tenendo conto dei diversi ambienti operativi e delle differenze che intercorrono in termini di Output in C e C++; infatti in C l’istruzione di output è l’istruzione “printf” mentre in C++ è l’istruzione “cout”. Inoltre il C++è un linguaggio di programmazione che cronologicamente è stato creato come evoluzione del linguaggio C e mette a disposizione alcune funzionalità aggiuntive per le spaziatura e la formattazione dell’output in generale che sono nelle funzioni previste dalla libreria / template <iomanip>.

L’idea di base

La risoluzione della formattazione del testo in vari colori passa dalla definizione di due parametri fondamentali: il primo il colore del testo “Foreground” e il secondo dal colore dello sfondo “Background”. Questi due parametri possono essere esplicitati mediante il codice dei colori corrispondenti per ora solo 16 da 0 a 15 sia per il testo che per lo sfondo in formato esadecimale e mediante le sequenze di Escape.
Le sequenze di Escape sono quelle sequenze che prevedono l’anteposizione del carattere “\” prima del codice specifico e che per esempio può essere utilizzato per le spaziature. Infatti ad esempio “\n” è l'”a capo” riga, “\t” è la tabulazione, e così via.

Codifica dei colori

La tabella dei codici di colori e sfondi previsti in è quindi:

COLORECODICE TESTOCODICE SFONDO
Nero3040
Rosso3141
Verde3242
Giallo3343
Blu3444
Magenta3545
Azzurro3646
Bianco3747

In questa tabella i codici dei colori sono riportati in esadecimale e tali codici partono da un valore esadecimale 30h pari a 48 in decimale e arrivano fino a FFh. La tabella non riporta tutti i colori