Rechtsbündige Ausgabe in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden von std::right und std::setw zur rechtsbündigen Ausgabe in C++
  2. Verwenden der Funktion printf zur rechtsbündigen Ausgabe in C++
Rechtsbündige Ausgabe in C++

Dieser Artikel demonstriert mehrere Methoden, wie man den Ausgabestrom in C++ rechtsbündig ausrichten kann.

Verwenden von std::right und std::setw zur rechtsbündigen Ausgabe in C++

Die C++-Standardbibliothek bietet E/A-Manipulator-Hilfsfunktionen zur besseren Steuerung von Datenströmen, wenn sie mit << >>-Operatoren verwendet werden, und sie sind in der Header-Datei <iomanip> enthalten. std::right ist einer der Stream-Manipulatoren, der die Position von Füllzeichen setzt. Daher sollte er in Verbindung mit der Manipulatorfunktion std::setw verwendet werden, die zum Einstellen der Stream-Breite dient. Die Funktion std::setw nimmt einen einzelnen Integer als Argument, um die Anzahl der zuzuweisenden Zeichen für die Stream-Breite anzugeben.

Im nächsten Beispielcode initialisieren wir einen Vektor von double mit beliebigen Werten, die eine unterschiedliche Genauigkeit haben, und geben sie dann alle im Blocksatz auf der rechten Seite der Konsole aus.

#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;
}

Ausgabe:

  123.231000
    2.234300
    0.324000
    0.012000
   26.949109
11013.000000
   92.001112
    0.000000

Verwenden der Funktion printf zur rechtsbündigen Ausgabe in C++

Eine weitere mächtige Funktion, um mit der E/A-Formatierung umzugehen, ist printf. Auch wenn printf nicht mit cin/cout-Streams verwendet wird, kann es Variablenargumente separat formatieren. Beachten Sie, dass wir den %f-Formatierer für die Fließkommawerte verwenden und eine beliebige Zahl 20 verwenden, um Füllzeichen zu jedem Element hinzuzufügen. Das Ergebnis ist, dass jede Zeile 20 Zeichen breit ist, und da die Zahl positiv ist, werden die Füllzeichen von links angehängt.

#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;
}

Ausgabe:

  123.231000
    2.234300
    0.324000
    0.012000
   26.949109
11013.000000
   92.001112
    0.000000

Alternativ können wir eine negative ganze Zahl in den Formatbezeichner einfügen, um die Füllzeichen auf der rechten Seite anzuhängen und die Ausgabe links zu begründen. Eine weitere mächtige Funktion des printf ist die Formatierung von literalen String-Werten, wie im folgenden Beispielcode demonstriert. Beachten Sie, dass %c der char-Formatbezeichner ist und 0x20 der hexadezimale Wert für ein Leerzeichen.

#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;
}

Ausgabe:

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ IO