C++之標準裝置IO操作流

來源:互聯網
上載者:User

  每種語言系統都會提供IO操作的類庫,用於對預定義類型資料進行輸入輸出的操作。C++也是如此,它是以位元組流的形式實現的。在輸入操作時,位元組流從輸入裝置(鍵盤、磁碟)流向記憶體;在輸出操作時,位元組流由記憶體流向輸出裝置(顯示器、印表機);位元組流可以是ASCII字元、位元據、圖形映像、音頻視頻等資訊。檔案和字串也可以看成是有序的位元組流,又稱為檔案流和字串流。C++的編譯系統內建一個物件導向的輸入輸出軟體包,即IO流類庫。庫中各種類的聲明都被包含在相應的標頭檔中,比如之前經常用到的標頭檔iostream,其中使用的cin\cout都是常用的流對象,用於對標準裝置的IO操作。還有用於使用者檔案管理IO操作的fstream標頭檔(磁碟檔案的操作),用於字串流的IO操作的strstream標頭檔(記憶體字元流的操作),以及iomanip標頭檔用於輸入輸出的格式控制。

  在IO流類庫中包含以下幾個常用的流類:

ios是抽象基類,類istream和ostream是單繼承於ios,而類iostream是通過多繼承於類istream和類ostream。ios除了派生出istream和ostream還派生出fstreambase檔案流類和strstreambase串流類,而該4類又派生出ifstream、ofstream、istrstream、ostrstream,以及fstream和strstream。

  在C++中除了上述提到過的預定義流對象cout和cin外,還有非緩衝標準出錯流對象cerr和緩衝標準出錯流對象clog,它們都是來自於ostream類的對象,用於輸出錯資訊。cerr和clog之間的不同之處在於cerr是不經過緩衝區直接向顯示器輸出有關資訊,而clog則是先把資訊放在緩衝區,緩衝區滿後或遇上endl時向顯示器輸出。下面介紹幾個預定義對象cout和cin的幾個成員函數:

cout.put(字元變數或單字元);//註:參數可以是字元的ASCII碼或整型運算式

cin.get(字元型變數);//註:從輸入資料流中讀取一字元(包括空白字元)

cin.getline(字元數組,字元個數,終止標誌符);

cin.getline(字元指標,字元個數,終止標誌符);//註:從輸入資料流中讀取n-1個字元,賦值給字元數組或字元指標所指的字元數組,最後插入一個字串結束標誌'\n'。如果在讀取n-1個字元之前遇到指定的終止符,則提前結束讀取,最後插入一個字串結束標誌'\n'。

cin.ignore(n,終止符);//註:跳過輸入資料流中n個字元(預設為1),或遇到指定終止符(預設為EOF)時提前結束。

綜合上述成員函數舉例:

 1 #include "stdafx.h"
2 #include <iostream>
3
4 int main()
5 {
6 std::cout<<"cout.put:"<<std::endl;
7 std::cout.put('X');
8 std::cout.put('\n');
9 std::cout.put(88);
10 std::cout.put('\n');
11
12 std::cout<<"********************************"<<std::endl;
13
14 std::cout<<"cin.get:"<<std::endl;
15 char ch;
16 while(std::cin.get(ch))
17 {
18 if(ch=='\n')
19 {
20 std::cout<<std::endl;
21 break;
22 }
23 std::cout.put(ch);
24 }
25
26 std::cout<<"********************************"<<std::endl;
27
28 std::cout<<"cout.getline:"<<std::endl;
29
30 char str[10];
31 std::cin.getline(str,10,'t');
32 std::cout<<str<<std::endl;
33
34 std::cout<<"********************************"<<std::endl;
35
36 std::cout<<"cout.ignore:"<<std::endl;
37 std::cin.ignore(5,'t');
38 std::cin>>str;
39
40 std::cout<<str<<std::endl;
41
42 return0;
43 }

結果:

對於最後一個預定義對象cin成員函數ignore,在實際的操作過程中發現有問題,正如結果所示,我所輸入的字串aaaabbbbtttttt,ignore函數設定是忽略5個,遇到終止符t則提前結束,可是運行出來的結果,和預想有很大的區別:(1)結果只是忽略了4個a;(2)遇到t卻沒有提前結束;(3)字串數組str長度為10,為什麼可以輸入大於10個字元,而且輸出的str也超過了10個;查了些有關資料,還是不是很瞭解是出於什麼問題?請各位大蝦們幫忙!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.