Aracılığıyla paylaş


Ekleme işleçlerini kullanarak ve biçimini denetleme

Bu konuda biçimini denetlemek ve ekleme işleçleri kendi sınıflarınızı oluşturmak nasıl gösterir.Ekleme noktasını (<<) tüm standart C++ veri türleri preprogrammed, işleç bayt çıkış akışı nesnesi gönderir.Ekleme operators "tamsayı bağımsız değişkenlerin varsayılan biçimini öğeleri olan önceden tanımlanmış manipulators ile" çalışır.

Biçimi aşağıdaki seçenekleri ile denetleyebilirsiniz:

  • Çıkış genişliği

  • Hizalama

  • Precision

  • Sayı tabanı

Çıkış genişliği

Çıkış hizalamak için her madde için çıkış genişliği koyarak belirlediğiniz setw manipulator akış veya çağırarak genişliği üye işlevi.Bu örnek sağa sütun en az 10 karakter genişliğinde değerler hizalar:

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

420970az.collapse_all(tr-tr,VS.110).gifÇıktı

      1.23
     35.36
     653.7
   4358.24

Öndeki boşluklar, 10'dan az karakter genişliğinde herhangi bir değere eklenir.

Bir alanı koymak kullanmak Dolgu belirtilen genişliğe sahip alanlar için doldurma karakterinin değerini ayarlar üye işlevi.Varsayılan değer boş bir kutudur.Sütundaki sayıların yıldız işareti ile koymak önceki değiştirmek için gibi döngü:

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

endl Manipulator yeni satır karakteri değiştirir ('\n').Çýktý aþaðýdaki gibi görünür:

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

Veri öğelerini genişlikleri aynı satırda belirtmek için kullanın 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;
}

420970az.collapse_all(tr-tr,VS.110).gifÇıktı

Genişliği üye işlev <iostream> bildirilir.Kullanırsanız, setw ya da diğer manipulator bağımsız değişkenlerle <iomanip> eklemeniz gerekir.Çıkışta, 6 genişlikte bir alan ve bir alanda 10 genişliğinin tamsayılar dizeleri yazdırılır:

  Zoot      1.23
 Jimmy     35.36
    Al     653.7
  Stan   4358.24

Ne setw ne de genişliği değerler keser.Biçimlendirilmiş çıktı, akışın kesinlik ayarı tabi değerin tümünü yazdırır, Genişlik aşıyor.Her ikisi de setw ve genişliği yalnızca aşağıdaki alanı etkiler.Alan genişliği döner, varsayılan davranış (gerekli genişlik) bir alan yazdırıldıktan sonra.Ancak, akış Biçim seçenekleri değiştirilinceye kadar yürürlükte kalır.

Hizalama

Sağa hizalanmış metin için varsayılan çıkış akışları.Sola Hizala önceki örnekte adları ve sayıları sağa hizalamak için yerini için gibi döngü:

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

Çýktý aþaðýdaki gibi görünür:

Zoot        1.23
Jimmy      35.36
Al         653.7
Stan     4358.24

Left-align bayrağı kullanılarak ayarlanır setiosflags ile manipulator sol Numaralandırıcı.Bu numaralayıcı tanımlandığı şekliyle IOS sınıf başvuru içermelidir böylece IOS:: öneki.Resetiosflags manipulator left-align bayrağını devre dışı bırakır.Aksine genişliği ve setw, etkisini setiosflags ve resetiosflags kalıcıdır.

Precision

Kayan nokta duyarlılık için varsayılan değer altıdır.Örneğin, 3466.9768 sayısı 3466.98 yazdırır.Bu değeri yazdırma şeklini değiştirmek için setprecision manipulator.Manipulator iki bayrak vardır: sabit ve Bilimsel.Sabit ayarlanmışsa, 3466.976800 olarak numarası yazdırır.Bilimsel , baskı 3.4669773 + 003 olarak ayarlandığında.

Gösterilen kayan nokta sayıları görüntülemek için Hizalama önemli bir rakam ile değiştirmek için gibi döngü:

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, bu listeyi yazdırır:

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

Bilimsel gösterim ortadan kaldırmak için önce bu ifade Ekle için döngü:

cout << setiosflags( ios::fixed );

Sabit yazımda program ile bir rakam ondalık ayırıcıdan sonra yazdırır.

Zoot         1.2
Jimmy       35.4
Al         653.7
Stan      4358.2

Değiştirirseniz, ios::fixed bayrak ios::scientific, bu program yazdırır:

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

Yine, program bir rakam ondalık ayırıcıdan sonra yazdırır.İos::fixed veya ios::scientific , duyarlılık değeri ondalık noktadan sonraki basamak sayısını belirler, ayarlanmış olur.Ne bayrağı ayarlı ise, duyarlılık değeri anlamlı basamak sayısını belirler.resetiosflags Manipulator bu bayrakları temizler.

Sayı tabanı

Ara, Eki, ve onaltılık manipulators giriş ve çıkış için varsayılan sayı tabanı ayarlayın.Örneğin, eklerseniz, onaltılık manipulator çıktı akışına, nesnenin içine doğru tamsayılar iç veri gösterimi onaltılık çıktı biçimine çevirir.Sayılar, a ile f basamaklı bir sayı küçük harf olarak görüntülenen büyük bayrağı Temizle (varsayılan); Aksi halde, büyük harfle görüntülenir.Varsayılan sayı tabanı olan Ara (ondalık).

Ayrıca bkz.

Başvuru

Çıkış akımları