C++: I/O流詳解(二)——輸入輸出格式控制


一、格式控制

ios提供直接設置標志字的控制格式函數

iostream和iomanip庫還提供了一批控制符簡化I/O格式化操作

 1 狀態標志            值           含義                   輸入/輸出
 2 skipws          0X0001    跳過輸入中的空白                  I
 3 left            0X0002    左對齊輸出                       O
 4 right           0X0004    右對齊輸出                   O
 5 internal        0X0008    在符號位和基指示符后填入字符      O
 6 dec             0X0010    轉換基制為十進制                I/O
 7 oct             0X0020    轉換基制為八進制                 I/O
 8 hex             0X0040    轉換基制為十六進制             I/O
 9 showbase        0X0080    在輸出中顯示基指示符              O
10 showpoint       0X0100    輸出時顯示小數點                 O
11 uppercase       0X0200    十六進制輸出時一律用大寫字母       O
12 showpos         0X0400    正整數前加“+”號                 O
13 scientific      0X0800    科學示數法顯示浮點數             O
14 fixed           0X1000    定點形式顯示浮點數               O
15 unitbuf         0X2000    輸出操作后立即刷新流             O
16 stdio           0X4000    輸出操作后刷新stdout 和 stdree   O

 

設置標識字:

例1:

 1 //例10-4  設置輸出寬度 
 2 #include <iostream.h>
 3 void main()
 4 { char *s = "Hello";
 5    cout.fill( '*' ) ;            // 置填充符
 6    cout.width( 10 ) ;        // 置輸出寬度
 7    cout.setf( ios :: left ) ;        // 左對齊
 8    cout << s << endl ;
 9    cout.width( 15 ) ;        // 置輸出寬度
10    cout.setf( ios :: right, ios :: left ) ;    // 清除左對齊標志位,置右對齊
11    cout << s << endl ;
12 } 

輸出:

例二:不同基數形式的輸入輸出

 1 #include <iostream.h>
 2 void main()
 3 { int a , b , c ;
 4    cout << "please input a in decimal: " ;
 5    cin.setf( ios :: dec , ios :: basefield ) ;   cin >> a ;    //十進制輸入
 6    cout << "please input b in hexadecimal: " ;        
 7    cin.setf( ios :: hex , ios :: basefield ) ;   cin >> b ;     //十六進制輸入
 8    cout << "please input c in octal: " ;
 9    cin.setf( ios :: oct , ios :: basefield ) ;    cin >> c ;     //八進制輸入
10    cout << "Output in decimal :\n" ;
11    cout.setf( ios :: dec, ios :: basefield );            //十進制輸出
12    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
13    cout.setf( ios :: hex , ios :: basefield ) ;        //十六進制輸出
14    cout << "Output in hexadecimal :\n" ;
15    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
16    cout.setf( ios :: oct , ios :: basefield ) ;        //八進制輸出
17    cout << "Output in octal :\n" ;
18    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
19 }

輸出:

例三:格式化輸出浮點數

 1 #include <iostream.h>
 2 void main()
 3 { double x = 22.0/7 ;
 4    int i ;
 5    cout << "output in fixed :\n" ;
 6    cout.setf( ios::fixed | ios::showpos ) ;         // 定點輸出,顯示 +
 7    for( i=1; i<=5; i++ )
 8       { cout.precision( i ) ;  cout << x << endl ; }
 9    cout << "output in scientific :\n" ;
10    // 清除原有設置,科學示數法輸出
11    cout.setf(ios::scientific, ios::fixed|ios::showpos ) ;    
12    for( i=1; i<=5; i++ )
13       { cout.precision(i) ;   cout << x*1e5 << endl ; }
14 }

二、格式控制符

 控制符是istream和ostream類定義了一批函數,作為重載插入運算符<<或提取運算符>>的右操作數控制I/O格式。

 

例1:

 1 // 整數的格式化輸出
 2 #include <iostream>
 3 #include <iomanip>
 4 using namespace std ;
 5 void main()
 6 { const int k = 618 ;
 7    cout << setw(10) << setfill('#') << setiosflags(ios::right) << k <<endl ;
 8    cout << setw(10) << setbase(8) << setfill('*')
 9            << resetiosflags(ios::right) << setiosflags(ios::left) << k << endl ;
10 } 

輸出:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM