C++之輸入輸出流

輸入輸出流:
1. I/O(輸入/輸出)流類庫提供對象之間的數據交互服務
流類庫預約義了一批流對象,鏈接經常使用的外部設備
程序員能夠定義所需的I/O流對象,使用流庫提供的工做方式
實現數據傳輸
2.流類和流對象: 程序中,對數據的輸入/輸出是以字節流實現的
應用程序對字節序列做出各類數據解釋
I/O系統的任務就是在內存和外部設備之間穩定可靠地傳輸數據
和解釋數據。
流類對象能夠創建和刪除,能夠從流中獲取數據和向流添加數據
3.流類庫: 流庫(stream library)是用繼承方法創建的輸入輸出類庫
流庫具備兩個平行的基類:streambuf 和 ios 類,全部流類均以二者
之一做爲基類
streambuf 類提供對緩衝區的低級操做
設置緩衝區 對緩衝區指針操做 向緩衝區存/取字符
ios 類及其派生類提供用戶使用流類的接口,支持對streambuf 的緩
衝區輸入/輸出的格式化或非格式化轉換ios

4.提供用戶接口:程序員

5.頭文件函數

  iostream.h  包含操做全部輸入/輸出流所需的基本信息

    含有cin、cout、cerr、clog對象,提供無格式和格式化的I/Ospa

  iomanip.h  包含格式化I/O操縱算子,用於指定數據輸入輸出的格式
  fstream.h  處理文件信息,包括創建文件,讀/寫文件的各類操做接口
  每種C++版本還包含其餘一些與I/O相關的庫,提供特定系統的某些功能
6.標準流:

(1)  cin  istream 類的對象,一般連向鍵盤,能夠重定向指針

(2)  cout  ostream 類的對象,一般連向顯示器,能夠重定向code

(3)  cerr  ostream 類的對象,連向顯示器。不能重定向對象

(4)  clog  ostream 類的對象,連向打印機。不能重定向blog

7.istream的共有成員函數繼承

函數接口

功能

read

無格式輸入指定字節數

get

從流中提取字符,包括空格

getline

從流中提取一行字符

ignore

提取並丟棄流中指定字符

peek

返回流中下一個字符,但不從流中刪除

gcount

統計最後輸入的字符個數

eatwhite

忽略前導空格

seekg

移動輸入流指針

tellg

返回輸入流中指定位置的指針值

operstor>>

提取運算符

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     char c;
 7     cout << "輸入字符:\n";
 8     while((c=cin.get())!='\0')
 9     {
10         cout.put(c);
11     }
12     cout << endl;
13     cout << "再次輸入字符:\n";
14     while(cin.get(c))
15     {
16         if(c == '\0')
17         {
18             break;
19         }
20         cout.put(c);
21     }
22     cout << endl;
23     char s[80];
24     cout << "最後輸入字符:\n";
25     //指定輸出字符數
26     cin.get(s,10);
27     cout << s << endl;
28 }

5.ostream的共有成員函數

函數

功能

put

無格式,插入一個字節

write

從無格式,插入一字節序列

flush

刷新輸出流

seekp

移動輸出流指針

tellp

返回輸出流中指定位置的指針值

operstor<<

插入運算符

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     char c[26];
 7     cin.getline(c,26);
 8     cout.write(c,26);
 9     cout << endl;
10 }

6.格式控制

  ios提供直接設置標誌字的控制格式函數
  iostream和iomanip庫還提供了一批控制符簡化I/O格式化操做 
設置標誌字:

狀態標誌              值               含義                             輸入/輸出

skipws            0X0001          跳過輸入中的空白                I

left             0X0002          左對齊輸出                   O

right             0X0004          右對齊輸出                   O

internal             0X0008          在符號位和基指示符後填入字符          O

dec               0X0010          轉換基製爲十進制                I/O

oct               0X0020          轉換基製爲八進制                I/O

hex            0X0040           轉換基製爲十六進制               I/O

showbase          0X0080          在輸出中顯示基指示符             O

showpoint          0X0100           輸出時顯示小數點                 O

uppercase              0X0200          十六進制輸出時一概用大寫字母            O

showpos                0X0400          正整數前加「+」號                 O

scientific                 0X0800          科學示數法顯示浮點數                O

fixed                  0X1000          定點形式顯示浮點數                O

unitbuf               0X2000          輸出操做後當即刷新流               O

stdio              0X4000          輸出操做後刷新stdout 和 stdree          O

7.IOS控制格式的函數:

函數

功能

long flags( long lFlags );

long flags() const;

用參數lFlags更新標誌字

返回標誌字

long setf( long lFlags );

long setf( long lFlags, long lMask );

設置lFlags指定的標誌位

將lMask指定的位清0,而後設置lFlags指定位

long unsetf( long  lMask );

將參數lMask指定的標誌位清0

int width( int nw );

設置下一個輸出項的顯示寬度爲nw

char fill( char cFill );

空白位置以字符參數cFill填充

int precision( int np );

用參數np設置數據顯示精度

8.設置輸出寬度

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

8.不用基數形式的輸出和輸入

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 { int a , b , c ;
 5    cout << "please input a in decimal: " ;
 6    cin >> dec >> a ;
 7    //cin.setf( ios :: dec , ios :: basefield ) ;
 8    //cin >> a ;    //十進制輸入
 9 
10    cout << "please input b in hexadecimal: " ;    
11    cin >> hex >> b ;
12    //cin.setf( ios :: hex , ios :: basefield ) ;
13    //cin >> b ;     //十六進制輸入
14 
15    cout << "please input c in octal: " ;
16    cin >> oct >> c ;
17    //cin.setf( ios :: oct , ios :: basefield ) ;
18    //cin >> c ;     //八進制輸入
19 
20    cout << "Output in decimal :\n" ;
21    cout <<"a = "<<a<<" b = "<<b<<"  c = "<<c<<endl ;
22    //cout.setf( ios :: dec, ios :: basefield );            //十進制輸出
23    //cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
24 
25    cout <<hex<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl ;
26    //cout.setf( ios :: hex , ios :: basefield ) ;        //十六進制輸出
27    cout << "Output in hexadecimal :\n" ;
28    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
29 
30    cout <<oct<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl ;
31 
32    //cout.setf( ios :: oct , ios :: basefield ) ;        //八進制輸出
33    //cout << "Output in octal :\n" ;
34    cout << "a = " << a << "  b = " << b << "  c = " << c << endl ;
35 }

 

9,格式化輸出浮點數

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

10.格式控制符

   控制符是istream和ostream類定義了一批函數,做爲重載插入運算符 << 或提取運算符 >> 的右操做數控制I/O格式
iostream幾個經常使用的控制符

控制符

功能

輸入/輸出

endl

輸出一個新行符,並清空流

O

ends

輸出串結束符,並清空流

O

flush

清空流緩衝區

O

dec

用十進制表示法輸入或輸出數值

I/O

hex

用十六進制表示法輸入或輸出數值

I/O

oct

用八進制表示法輸入或輸出數值

I/O

ws

提取空白字符

I

 

 

 

11.iomanip的控制符

控制符

功能

輸入/輸出

resetiosflags ( ios::lFlags )

清除lFlags指定的標誌位

I/O

setiosflags ( ios::lFlags )

設置lFlags指定的標誌位

I/O

setbase ( int base )

設置基數,base = 8,10,16

I/O

setfill ( char c )

設置填充符c

O

setprecision ( int n )

設置浮點數輸出精度

O

setw ( int n )

設置輸出寬度

O

 1 // 例11-7  整數的格式化輸出
 2 #include <iostream>
 3 #include <iomanip>
 4 using namespace std ;
 5 int 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 } 
相關文章
相關標籤/搜索