初級C++4IO流

輸入輸出流ios


輸入輸出的含義:數組

從操做系統的角度看,每個與主機相連的輸入輸出設備都被看做一個文件。安全


程序的輸入:從文件傳送給程序。app

程序的輸出:從程序傳送給文件。函數


分類:spa

一、標準I/O   鍵盤輸入 顯示器輸出操作系統

二、文件I/O   外存輸入 外存輸出指針

三、字符串I/O 內存輸入 內存輸出對象



C語言回顧ip

int i= 1; //假定佔2字節

printf("%d",i); //正確輸出

printf("%d",f); //f爲float型,只輸出f變量的前兩個字節

printf("%d","C++"); //輸出字符串的起始地址


scanf("%d",&i);//將內容寫入變量i

scanf("%d",i);//將內容寫入內存地址爲i的地方



C++的輸入輸出中,編譯系統對數據類型進行嚴格的檢查。

C++的I/O操做是類型安全的。 type safe



——————————————————————————————


流stream

輸入輸出流是指由若干字節組成的字節序列,這些字節中的數據按順序從一個對象傳送到另外一對象。

流表示了信息從源到目的端的流動。


實際上,在內存中爲每個數據流開闢一個內存緩衝區,用來存放流中的數據。

流是與緩衝區相對應的。

緩衝區中的數據就是流。



輸入輸出流被定義爲類

I/O庫中的類被稱爲流類 stream class

用流類定義的對象被稱爲流對象




ios

istream ostream fstreambase strstreambase

iostream ifstream istrstream ofstream ostrstream istream_withassign ostream_withassign

fstream strstream iostream_withassign


與iostream類庫有關的頭文件

iostream  包含輸入輸出流的基本信息

fstream   文件I/O

strstream 字符串I/O

stdiostream 用於混合使用C和C++的I/O機制:例如想將C程序轉變爲C++程序

iomanip  使用格式化I/O時應包含此頭文件



在iostream頭文件中定義的類:

ios istream ostream iostream istream_withassign ostream_withassign istream_withassign


在iostream頭文件中定義的對象:

cin  istream_withassign類對象 stdin

cout ostream_withassign類對象 stdout

cerr ostream_withassign類對象 stderr

clog ostream_withassign類對象 stderr


—————————————————————————————

標準輸出流


cout流對象

console output

一、cout是流對象

二、自動判斷輸出類型

三、在內存中自動開闢緩衝區,插入endl時輸出緩衝區中的全部數據,並刷新流。

   「\n」沒有此效果(不是全部編譯系統都體現這一區別)


cerr流對象

console error

向標準出錯設備 standard error device 輸出有關出錯信息

和cout的不一樣:

cout能夠被重定向輸出到磁盤文件

cerr不能重定向,只能在顯示器輸出



clog流對象

console log

標準出錯流 做用與cerr相同

與cerr區別:

cerr不通過緩衝區

clog有緩衝區


——————————————————————————————


格式輸出

    |--使用控制符

    |--使用流對象的有關成員函數


使用控制符控制輸出格式:

頭文件iomanip

dec hex oct

setbase(n)

setfill(c)

setprecision(n)

setw(n)

setiosflags(ios::fixed)

setiosflags(ios::scientific)

setiosflags(ios::left)

setiosflags(ios::right)

setiosflags(ios::skipws)

setiosflags(ios::uppercase)

setiosflags(ios::showpos)

resetioflags()



用流對象的成員函數控制輸出格式

cout中的成員函數

precision(n) 

width(n)

fill(c)

setf()

unsetf()


格式標誌在ios中被定義爲枚舉值

ios::left

ios::right

ios::internal


ios::dec

ios::oct

ios::hex


ios::showbase

ios::showpoint

ios::uppercase

ios::showpos


ios::scientific

ios::fixed


ios::unitbuf  每次輸出後刷新

iso::stdio    每次輸出後清除stdout stderr


說明:

一、成員函數width(n)和控制符setw(n)只對其後的第一個輸出項有效

二、輸出格式狀態分爲5組,每組中只能一個生效

三、用setf函數設置格式狀態時,能夠包含兩個或多個格式標誌

   這些格式標誌在ios類中被定義爲枚舉值,每個格式標誌以一個二進位表明

   能夠用「位或」運算符「|」組合多個格式標誌

cout.setf(ios::internal | ios::showpos);


用控制符更爲方便


——————————————————————————————


用流成員函數put輸出字符

專用於輸出單個字符的成員函數put

cout.put('a'); //字符

cout.put(65+32); //ASCII碼

cout.put(71).put(79).put(79).put(68).put('\n');// GOOD


C語言中,putchar()定義在stdio.h中

C++中,putchar()定義在iostream中



———————————————————————————



標準輸入流 鍵盤

>> 流提取符  終止標誌:輸入流中的white space(空格 tab 換行)

只有輸入完數據再按回車鍵後,該行數據才被送入鍵盤緩衝區,造成輸出流,提取運算符">>"才能從中提取數據。


cin

正常狀態:1 true

出錯狀態:0 false  無效字符 文件結束符   


文件結束符

IBM PC Ctrl+Z

  Unix Ctrl+D


   

用於字符輸入的流成員函數


get的3種形式

    |--cin.get()   返回讀入的字符 遇EOF結束  C語言中的getchar()功能相同

    |--cin.get(ch) 返回bool值  C語言中的getchar(ch)

    |--cin.get(字符數組,字符個數,終止字符) 讀取n-1個字符賦給字符數組,終止字符默認爲'\n'



getline(字符數組,字符個數,終止字符)

和cin.get的不一樣,cin.get在終止字符以前中止,getline在終止字符以後中止


>>可讀取標準類型

getline只能操做字符



eof函數 end of file

cin.eof() 末尾爲真


peek函數

cin.peek() 觀察下一字符而指針不動


putback函數

cin.putback(ch) 將字符ch插入到當前指針位置,以供後面讀取


ignore函數

cin.ignore(n,終止字符)

cin.ignore(5, 'A') //跳過輸入流中的5個字符,遇A終止跳躍

cin.ignore() //等同於 cin.ignore(1,EOF)


——————————————————————————————


文件操做與文件流


文件的概念:file 存儲在外部介質上數據的集合

操做系統以文件爲單位對數據進行管理


文件分類:

    |--程序文件 program file  .cpp  .obj  .exe

    |--數據文件 data file

在程序運行時,將一些數據輸出到磁盤上存放起來,之後須要時再從磁盤中輸入到計算機內存


組織形式劃分:

    |--ASCII文件   字符文件

    |--二進制文件  字節文件



int i = 100;

低級I/O   二進制形式 不進行數據格式轉換

高級I/O   字符串形式 將數據從內存送到顯示器輸出


——————————————————————————————


輸出文件流:從內存流向外存文件的數據

輸入文件流:從外存文件流向內存的數據


文件流類

ifstream  ASCII 二進制 文件輸入

ofstream  ASCII 二進制 文件輸出

fstream   二進制文件輸入輸出


必須事先定義流對象

cin cout cerr clog 是在iostream中已經定義好的流對象


ofstram outfile;//定義輸出文件流對象


文件的打開與關閉


文件流對象.open(磁盤文件名,輸入輸出方式);

outfile.open("f1.dat",ios::out);


ofstream outfile("f1.dat",ios::out);


輸入輸出方式在ios類中定義,是枚舉常量

ios::in

ios::out

ios::app

ios::ate

ios::trunc

ios::binary

ios::nocreate  新版C++不提供

ios::noreplace 新版C++不提供

ios::in | ios::out

ios::out |ios::binary

ios::in | ios::binary



每打開一個文件都有一個文件指針


打開操做失敗,返回0

構造函數失敗,返回0


關閉磁盤文件

outfile.close();



C語言,exit() 函數定義在 stdlib.h中

—————————————————————————————


對ASCII文件的操做的兩種操做

    |-- <<  >>

    |--get getline

put



對二進制文件的操做

    將內存中數據存儲形式不加轉換地傳送到磁盤文件,所以它又稱爲內存數據的映象文件 又稱爲字節文件。

    在打開時要用ios::binary指定爲二進制形式傳送和存儲。

    二進制文件能夠既能輸入,又能輸出——與ASCII文件不一樣的地方。

    用fstream定義輸入輸出的二進制文件


用成員函數read write 讀寫

istream& read(char *buffer, int len);

ostream& write(const char *buffer, int len);


與文件指針有關的流成員函數

二進制文件容許對指針進行控制,以便在該位置上進行讀寫

gcout()


tellg()

seekg(文件中的位置)

seekg(位移量,參照位置)


tellp()

seekp(文件中的位置)

seekp(位移量,參照位置)


位移量 和 參照位置 爲long型整數,以字節爲單位

參照位置:在ios中定義的枚舉常量

ios::beg

ios::cur

ios::end


—————————————————————————


字符串流

之內存中用戶定義的字符數組(字符串)爲輸入輸出的對象


內存 <-> 緩衝區 <-> 數組

二進制   ASCII      ASCII


istrstream

ostrstream

strstream


不須要打開和關閉字符串流

自定義結束標誌


輸出字符串流對象

ostrstream構造函數原型

ostrstream::ostrstream(char * buffer, int n, int mode = ios::out); 

//第三個參數默認爲ios::out

//n 緩衝區大小(與數組能夠相同,也能夠不一樣)

ostrstream srtout(ch1, 20);



輸入字符串流對象

istrstream::istrstream(char * buffer);

istrstream::istrstream(char * buffer, int n);

istream strin(ch2);

istream strin(ch2,20);



輸入輸出字符串流對象

strstream::strstream(char * buffer, int n, int mode);

strstream strio(ch3, sizeof(ch3), ios::in | ios::out);


明天二級 2016-3-25

相關文章
相關標籤/搜索