Verwenden von Einfügeoperatoren und Festlegen des Formats
In diesem Thema wird wie der Steuerformat an und wie Einfügungsoperatoren für eigene Klassen erstellen. Der Operator Einfüge- (<<), der für alle Standard-C++-Datentypen vorprogrammiert ist, sendet Bytes in einen Ausgabestreamobjekt. Einfügungsoperatoren arbeiten mit vordefinierten "Manipulatoren," sind die Elemente, das Standardformat von Ganzzahlargumente ändern.
Sie können den Stil mit den folgenden Optionen steuern:
Ausgabe-Breite
Ausrichtung
Genauigkeit
Basisklasse
Ausgabe-Breite
Um Ausgabe auszurichten, geben Sie der Ausgabebreite für jedes Element an indem Sie den setw Manipulator im Stream platzieren oder die width-Memberfunktion aufrufen. Dieses Beispiel Recht-richtet die Werte einer Spalte mindestens 10 Zeichen breit aus:
// output_width.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
double values[] = { 1.23, 35.36, 653.7, 4358.24 };
for( int i = 0; i < 4; i++ )
{
cout.width(10);
cout << values[i] << '\n';
}
}
Ausgabe
1.23
35.36
653.7
4358.24
Führende Nullen werden jedem beliebigen Wert weniger als 10 Zeichen breit hinzugefügt.
Um ein Feld zu füllen, verwenden Sie die fill-Memberfunktion, die den Wert des Füllzeichens für Felder festlegen die eine angegebene Breite verfügen. Der Standardwert ist leer. Um die Spalte aus Zahlen mit Sternchen aufzufüllen, ändern Sie die vorherige für Schleife wie folgt:
for( int i = 0; i < 4; i++ )
{
cout.width( 10 );
cout.fill( '*' );
cout << values[i] << endl;
}
Der Manipulator endl ersetzt das Zeilenumbruchzeichen ('\n'). Die Ausgabe sieht wie folgt aus:
******1.23
*****35.36
*****653.7
***4358.24
Um Breite für Datenelemente in der gleichen Zeile anzugeben, verwenden Sie den setw an:
// setw.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
double values[] = { 1.23, 35.36, 653.7, 4358.24 };
char *names[] = { "Zoot", "Jimmy", "Al", "Stan" };
for( int i = 0; i < 4; i++ )
cout << setw( 6 ) << names[i]
<< setw( 10 ) << values[i] << endl;
}
Ausgabe
Die width-Memberfunktion wird im iostream-Bibliothek <deklariert>. Wenn Sie setw oder einen anderen Manipulator mit Argumenten verwenden, müssen Sie iomanip >einschließen <. In der Ausgabe sind Zeichenfolgen in einem Feld der Breite 6 und von ganzen Zahlen in einem Feld von Breite 10 ausgegeben:
Zoot 1.23
Jimmy 35.36
Al 653.7
Stan 4358.24
Weder setw schneidet noch width-Werte ab. Wenn diese formatierten, übersteigt Ausgabe die Breite, den gesamten Wertdruck abhängig von der Genauigkeitseinstellung des Streams. Beeinflussen setw und width nur das folgende Feld. Feldbreite stellt zum Standardverhalten wieder (die erforderliche Breite) Nachdem ein Feld gedruckt wurde. jedoch nach wie anderen Streamformatoptionen bestehen, bis geändert.
Ausrichtung
Ausgabestreams führen zu rechtsbündigem Text. Um die Namen im vorherigen Beispiel belassene-auszurichten und die Zahlen Recht-auszurichten, ersetzen Sie die für Schleife wie folgt:
for ( int i = 0; i < 4; i++ )
cout << setiosflags( ios::left )
<< setw( 6 ) << names[i]
<< resetiosflags( ios::left )
<< setw( 10 ) << values[i] << endl;
Die Ausgabe sieht wie folgt aus:
Zoot 1.23
Jimmy 35.36
Al 653.7
Stan 4358.24
Das Belasseneausrichtensflag wird festgelegt, indem der setiosflags mit Manipulator dem links Enumerator verwendet. Dieser wird in der IOS definiert Klasse, daher muss sein Verweis ios:: das Präfix enthalten. Der Manipulator resetiosflags stellt das Belasseneausrichtensflag ab. Im Gegensatz zu width und setw besteht die Auswirkung von setiosflags und resetiosflags ein.
Genauigkeit
Der Standardwert für ist Gleitkommagenauigkeit sechs. Beispiel der Ausgabe der Nummer. 3466,9768 als 3466,98. Um die Methode zu ändern, die dieser Wert gibt, verwenden Sie den Manipulator setprecision. Der Manipulator hat zwei Flags: fest und wissenschaftlich. Wenn fest festgelegt wird, der Zahlendruck als 3466,976800. Wenn scientific festgelegt wird, gibt es als 3.4669773+003.
Um der Gleitkommazahlen anzuzeigen, die in Ausrichtung erhebliches Ziffer dargestellt sind, ersetzen Sie die für Schleife wie folgt:
for ( int i = 0; i < 4; i++ )
cout << setiosflags( ios::left )
<< setw( 6 )
<< names[i]
<< resetiosflags( ios::left )
<< setw( 10 )
<< setprecision( 1 )
<< values[i]
<< endl;
Das Programm druckt diese Liste:
Zoot 1
Jimmy 4e+001
Al 7e+002
Stan 4e+003
Um der wissenschaftlichen Notation auszuschließen, fügen Sie diese ein für-Anweisung vor der Schleife:
cout << setiosflags( ios::fixed );
Mit fester Notation der Programmdruck mit einer Ziffer nach dem Dezimaltrennzeichen.
Zoot 1.2
Jimmy 35.4
Al 653.7
Stan 4358.2
Wenn das Flag ios::fixed von ios::scientific ändern, gibt das Programm dieses:
Zoot 1.2e+000
Jimmy 3.5e+001
Al 6.5e+002
Stan 4.4e+003
Auch hier gibt das Programm eine Stelle hinter dem Dezimaltrennzeichen. Wenn ios::fixed oder ios::scientific festgelegt wird, bestimmt der Genauigkeitswert die Anzahl der Ziffern nach dem Dezimaltrennzeichen. Wenn keines Flag festgelegt ist, legt der Genauigkeitswert die Gesamtzahl von signifikanten Stellen. Der Manipulator resetiosflags löscht diese Flags.
Basisklasse
dec, oct und hex Manipulatoren legen die Standardbasis für die Eingabe und Ausgabe fest. Wenn Sie den hex Manipulator in den Ausgabestream einfügen, übersetzt das Objekt ordnungsgemäß die interne Darstellung von ganzen Zahlen in ein Ausgabeformat hexadezimal. Die Zahlen werden mit Ziffern a bis f kleingeschrieben angezeigt, wenn das Großbuchstaben-Flag klar ist (Standard); Andernfalls werden sie in Großbuchstaben angezeigt. Die Standardbasis ist dec (dezimal).