HOWTO · C++
Giustifica a destra l'output in C++
Questo articolo introduce come giustificare a destra l'output in C++
Questo articolo illustrerà più metodi su come giustificare a destra il flusso di output in C++.
Usa std::right e std::setw per giustificare l’output a destra in C++
La libreria standard C++ fornisce funzioni di supporto del manipolatore I/O per controllare meglio i flussi quando viene utilizzata con gli operatori << >> e sono incluse nel file di intestazione <iomanip>. std::right è uno dei manipolatori di flusso che imposta la posizione dei caratteri di riempimento. Quindi dovrebbe essere usato insieme alla funzione di manipolazione std::setw, che è usata per impostare la larghezza del flusso. std::setw accetta un singolo intero come argomento per specificare il numero di caratteri da allocare per la larghezza del flusso.
Nel prossimo codice di esempio, inizializziamo un vettore di double con valori arbitrari che hanno una precisione diversa e poi li mostriamo tutti come giustificato sul lato destro della console.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << right << setw(20) << fixed << i << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
Produzione:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
Usa la funzione printf per giustificare a destra l’output in C++
Un’altra potente funzione per gestire la formattazione I/O è printf. Anche se printf non è usato con i flussi cin / cout, può formattare separatamente gli argomenti delle variabili. Nota che usiamo l’identificatore di formato %f per i valori in virgola mobile, e usiamo un numero arbitrario 20 per aggiungere caratteri di riempimento a ciascun elemento. Di conseguenza, ogni linea è larga 20 caratteri e poiché il numero è positivo, i caratteri di riempimento vengono aggiunti da sinistra.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%20f\n", i);
}
return EXIT_SUCCESS;
}
Produzione:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
In alternativa, possiamo inserire un numero intero negativo nell’identificatore di formato per riempire i caratteri sul lato destro, giustificando l’output a sinistra. Un’altra potente caratteristica di printf è formattare valori di stringa letterali, come dimostrato nel seguente codice di esempio. Nota che %c è l’identificatore di formato char e il valore 0x20 è esadecimale per un carattere spazio.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%-20f\n", i);
}
printf("%60s\n", "this ought to be justified right");
printf("%-20s|%20c|%20s\n", "wandering", 0x20, "the tower");
return EXIT_SUCCESS;
}
Produzione:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
this ought to be justified right
wandering | | the tower