Salta ai contenuti
Manuale LogoManuale Logo

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
Modificatore Dura fino a…
fixed, scientific Finché non lo cambi
left, right Finché non lo cambi
boolalpha Finché 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