Sdílet prostřednictvím


Používání operátorů insertion a řízení formátu

Toto téma ukazuje, jak určit formát a jak vytvořit vkládání operátorů pro své vlastní třídy.Vložení (<<) operátor, který je splnit naprogramované pro všechny standardní datové typy jazyka C++, odešle objekt výstupní datový proud bajtů.Vložení operátory pracují s předdefinované "manipulators," které jsou prvky, které změnit výchozí formát celočíselných argumentů.

Můžete řídit formát s následujícími parametry:

  • Šířka výstupu

  • Zarovnání

  • Přesnost

  • Číselná soustava

Šířka výstupu

Zarovnat výstupní, určit šířku výstup pro každou položku umístěním setw manipulator ve streamu nebo voláním Šířka členské funkce.V tomto příkladu vpravo zarovná hodnoty ve sloupci alespoň 10 znaků, který je široký:

// 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';
   }
}

Výsledek

      1.23
     35.36
     653.7
   4358.24

Úvodní mezery jsou přidány do libovolné hodnoty méně než 10 znaků na šířku.

Chcete-li doplnit pole, použijte Výplň členské funkce, která nastaví hodnotu odsazení znaků pro pole, která jsou zadaná šířka.Výchozí je prázdné.Pro vyplnění sloupce čísel pomocí hvězdiček, změňte předchozí pro smyčka takto:

for( int i = 0; i < 4; i++ )
{
   cout.width( 10 );
   cout.fill( '*' );
   cout << values[i] << endl;
}

endl Manipulator nahradí znak nového řádku ('\n').Výstup vypadá takto:

******1.23
*****35.36
*****653.7
***4358.24

Chcete-li určit šířku pro datové prvky ve stejném řádku, použijte setw manipulator:

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

Výsledek

Šířka deklaraci členské funkce v <iostream>.Použijete-li setw nebo jakékoli jiné manipulator s argumenty, musí být <iomanip>.Ve výstupu řetězce se tisknou pole o šířce 6 a celá čísla v poli šířka 10:

  Zoot      1.23
 Jimmy     35.36
    Al     653.7
  Stan   4358.24

Ani setw ani Šířka zkrátí hodnoty.Pokud formátovaný výstup přesahuje šířku, vytiskne celou hodnotu, za přesnost nastavení datového proudu.Obě setw a Šířka ovlivňují následující pole.Šířka pole se vrátí do jeho výchozí chování (potřebná šířka) poté, co byl vytištěn jedno pole.Však jiné možnosti formátu datového proudu zůstávají v platnosti dokud se nezmění.

Zarovnání

Výstupní datové proudy, výchozí text zarovnaný doprava.Názvy uvedené v předchozím příkladu zarovnání doleva a čísla zarovnat doprava, nahradit pro smyčka takto:

for ( int i = 0; i < 4; i++ )
   cout << setiosflags( ios::left )
        << setw( 6 )  << names[i]
        << resetiosflags( ios::left )
        << setw( 10 ) << values[i] << endl;

Výstup vypadá takto:

Zoot        1.23
Jimmy      35.36
Al         653.7
Stan     4358.24

Left-align příznak je nastaven pomocí setiosflags manipulator se levé výčtu.Tento výčet je definována v ios třídy, musí obsahovat odkaz ios:: předpony.Resetiosflags manipulator Vypne příznak left-align.Na rozdíl od Šířka a setw, efekt setiosflags a resetiosflags je trvalé.

Přesnost

Výchozí hodnota pro přesností a plovoucí desetinnou čárkou je šest.Například číslo 3466.9768 vytiskne jako 3466.98.Můžete změnit způsob, jakým tato hodnota se vytiskne setprecision manipulator.Manipulator má dva praporky: pevnou a vědecké.Pokud pevnou nastaveno číslo vytiskne jako 3466.976800.Pokud vědecké je nastavena, bude vytištěn jako 3.4669773 + 003.

Chcete-li zobrazit čísla s plovoucí desetinnou čárkou v Zarovnání nahradit jednu číslici, pro smyčka takto:

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;

Program vytiskne tento seznam:

Zoot          1
Jimmy     4e+001
Al        7e+002
Stan      4e+003

Odstranit matematický zápis, vložte tento příkaz před pro smyčka:

cout << setiosflags( ios::fixed );

S pevnou zápisu program vytiskne se jedna číslice za desetinnou čárkou.

Zoot         1.2
Jimmy       35.4
Al         653.7
Stan      4358.2

Změníte-li ios::fixed příznak ios::scientific, program vytiskne toto:

Zoot    1.2e+000
Jimmy   3.5e+001
Al      6.5e+002
Stan    4.4e+003

Znovu program vytiskne jedna číslice za desetinnou čárkou.Pokud ios::fixed nebo ios::scientific je nastavena hodnotu přesnosti určuje počet číslic za desetinnou čárkou.Pokud ani jeden příznak nastaven, hodnota přesnosti určuje celkový počet platných číslic.resetiosflags Manipulator vymaže tyto příznaky.

Číselná soustava

Dec, října, a hex manipulators nastavena výchozí číselná soustava pro vstup a výstup.Vložíte-li například hex manipulator do výstupního datového proudu objekt správně překládá interních dat reprezentace celá čísla v šestnáctkové soustavě výstupní formát.Čísla jsou zobrazena s číslicemi a až f malými písmeny-li velká příznak je jasné (výchozí); jinak jsou zobrazeny velkými písmeny.Výchozí číselná soustava je dec (desítkově).

Viz také

Referenční dokumentace

Výstupní datové proudy