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';
}
}
Çı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;
}
Çı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).