Skip to content

Input/Output Formattato

Stampare “3.14159265358979” va bene in alcuni casi, ma se stai mostrando un prezzo vuoi “3.14”. Se stai costruendo una tabella vuoi che le colonne siano allineate.

Il C++ offre strumenti per controllare con precisione come appaiono i dati sullo schermo. Per usarli, includi <iomanip>:

#include <iostream>
#include <iomanip>
using namespace std;

Di default, cout mostra 6 cifre significative. Con setprecision puoi cambiarle:

double pi = 3.14159265358979;
cout << pi << endl; // 3.14159 (default: 6 cifre)
cout << setprecision(3) << pi << endl; // 3.14
cout << setprecision(10) << pi << endl; // 3.141592654

Per controllare le cifre dopo la virgola (non le cifre significative), aggiungi fixed:

double x = 1234.5678;
cout << fixed << setprecision(2) << x << endl; // 1234.57
cout << fixed << setprecision(4) << x << endl; // 1234.5678
cout << fixed << setprecision(0) << x << endl; // 1235 (arrotondato)

Per la notazione scientifica (es. per numeri molto grandi o piccoli):

double grande = 1234567.89;
cout << scientific << setprecision(3) << grande << endl; // 1.235e+06

setw(n) riserva almeno n spazi per il prossimo valore stampato. Se il valore è più corto, vengono aggiunti spazi davanti (a destra di default):

cout << setw(10) << "Nome" << setw(10) << "Età" << endl;
cout << setw(10) << "Alice" << setw(10) << 16 << endl;
cout << setw(10) << "Bob" << setw(10) << 17 << endl;

Output:

Nome Età
Alice 16
Bob 17

Attenzione: setw è temporaneo. Vale solo per il prossimo valore stampato, poi va reimpostato.

Di default i valori vengono allineati a destra. Puoi cambiarlo con left:

cout << left << setw(10) << "Alice" << endl; // Alice
cout << right << setw(10) << "Alice" << endl; // Alice

Output:

Alice
Alice

left e right sono persistenti: rimangono attivi finché non li cambi.

Di default setw riempie con spazi. Puoi usare un altro carattere:

cout << setfill('*') << setw(10) << "ciao" << endl; // ******ciao
cout << setfill('0') << setw(5) << 42 << endl; // 00042

Utile per creare separatori o codici con zeri iniziali.

Di default true e false vengono stampati come 1 e 0. Con boolalpha vengono stampate le parole:

bool b = true;
cout << b << endl; // 1
cout << boolalpha << b << endl; // true
bool f = false;
cout << boolalpha << f << endl; // false
ModificatoreDura fino a…
fixed, scientificFinché non lo cambi
left, rightFinché non lo cambi
boolalphaFinché non lo cambi
setprecision(n)Finché non lo cambi
setfill(c)Finché non lo cambi
setw(n)Solo il prossimo valore
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main() {
// Intestazione della tabella
cout << left
<< setw(15) << "Studente"
<< setw(8) << "Età"
<< setw(10) << "Voto"
<< endl;
// Riga separatrice
cout << setfill('-') << setw(33) << "" << endl;
cout << setfill(' '); // ripristina il riempimento con spazio
// Dati degli studenti
struct Studente { string nome; int eta; double voto; };
Studente studenti[] = {
{"Alice", 16, 8.5},
{"Bob", 17, 7.2},
{"Carlo Verdi", 15, 9.1}
};
for (const auto& s : studenti) {
cout << left
<< setw(15) << s.nome
<< setw(8) << s.eta
<< fixed << setprecision(1) << setw(10) << s.voto
<< endl;
}
return 0;
}

Output:

Studente Età Voto
---------------------------------
Alice 16 8.5
Bob 17 7.2
Carlo Verdi 15 9.1