[C++]輸入/輸出流類庫
輸入/輸出流類庫
編譯系統已經以運算子或函式的形式做好了對標準外設(鍵盤、螢幕、印表機、檔案)的介面,使用時只需按照要求的格式呼叫即可。
cin>>x; cout<<x;
cin.get(ch);
輸入輸出流(I/O Stream)
C++語言的I/O系統向使用者提供一個統一的介面,使得程式的設計儘量與所訪問的具體裝置無關,在使用者與裝置之間提供了一個抽象的介面:輸入輸出流。
用標準流進行輸入/輸出時,系統自動地完成資料型別的轉換。對於輸入流,要將輸入的字元序列形式的資料變換成計算機內部形式的資料(二進位制或ASCII)後,再賦給變數,變換後的格式由變數的型別確定。對於輸出流,將要輸出的資料變換成字串形式後,送到輸出流(檔案)中。
過載輸入(提取)和輸出(插入)運算子
class A
{ float x, y;
public:
A(float a=0, float b=0){ x=a; y=b; }
void Set(float a, float b){ x=a; y=b; }
void Show(void){ cout<<x<<‘\t’<<y<<endl; }
};
void main(void)
{ A a(2,3);
a.Set(20 , 30); 輸入物件資料
a.Show( ); 輸出物件資料
}
物件不能直接輸入輸出
在C++中允許使用者過載運算子“<<”和“>>”,實現物件的輸入和輸出。過載這二個運算子時,在物件所在的類中,將過載這二個運算子的函式說明該類的友元函式。
過載提取運算子的一般格式為:
istream & operater >>(istream &is, ClassName &f);
返回值型別:類istream的引用,cin中可以連續使用運算子“>>”。
cin>>a>>b;
第一個引數:是“>>”的左運算元cin型別,類istream的引用
第二個引數:是“>>”的右運算元,即欲輸入的物件的引用.
過載輸出(插入)運算子的一般格式為:
與輸入(提取)運算子比較:
friend istream & operater >>(istream &, ClassName &);
將輸入流改為輸出流。
編譯系統已經以運算子或函式的形式做好了對標準外設(鍵盤、螢幕、印表機、檔案)的介面,使用時只需按照要求的格式呼叫即可。
檔案流
C++在標頭檔案fstream.h中定義了C++的檔案流類體系 ,當程式中使用檔案時,要包含標頭檔案fstream.h 。
當使用檔案時,在程式頭有:#include<fstream.h>
其中定義了各種檔案操作運算子及函式。
程式對文字檔案的操作與對鍵盤、顯示器的操作比較:
在涉及文字檔案的操作時,將輸入檔案看成鍵盤,將輸出檔案看成顯示器,格式不變。只需在程式中增加開啟與關閉檔案的語句。
檔案的操作
56:ASCII表示為 00110101 00110110,佔兩位元組
56:二進位制表示為 111000,佔六個二進位制位
不同的檔案操作的函式、格式不同
文字檔案的開啟與關閉
在檔案操作前,需要將程式與被操作的檔案聯絡起來,使程式可以“引用”檔案。
在程式內定義一個檔案類的物件,由該物件與檔案發生聯絡,程式內所有的與檔案的操作都是對該物件的操作。
fstream infile , outfile; 兩個物件,可以聯絡兩個輸入輸出檔案
ifstream infile; 物件只能聯絡輸入檔案
ofstream outfile; 物件只能聯絡輸出檔案
如何使檔案類的物件與欲操作的檔案發生聯絡?
用物件開啟檔案:
ifstream infile; //定義輸入檔案類物件
infile.open(“myfile1.txt”);//利用函式開啟某一檔案
開啟檔案的作用是,使檔案流物件與要使用的檔名之間建立聯絡。
ofstream outfile; //定義輸出檔案類物件
outfile.open(“myfile1.txt”);//開啟某一檔案供輸出
infile.open(“myfile1.txt”);
開啟檔案“myfile1.txt”用於輸入,並將這個檔案與輸入檔案類物件infile建立聯絡,今後,在程式中,用到這個檔案“myfile1.txt”的地方就用infile來代替。
outfile.open(“myfile2.txt”);
開啟檔案“myfile2.txt”用於輸出,並將這個檔案與輸出檔案類物件outfile建立聯絡,今後,在程式中,用到這個檔案“myfile2.txt”的地方就用outfile來代替。
如何從檔案中輸入輸出資料?
將檔案類物件看成鍵盤和顯示器即可。
ifstream infile; //定義輸入檔案類物件
infile.open(“myfile1.txt”);//利用函式開啟某一檔案
float x , y;
infile>>x>>y;
ifstream outfile; //定義輸出檔案類物件
infile.open(“myfile2.txt”);//利用函式開啟某一檔案
float x=3 , y=4;
outfile<<x<<‘\t’<<y<<endl;
4)用完檔案後,使用成員函式關閉檔案.如:
ifstream infile;
ofstream outfile
infile.open(“myfile1.txt”);
outfile.open(“myfile2.txt”);
float x,y;
infile>>x>>y;
outfile<<x<<‘\t’<<y<<endl;
infile.close();
outfile.close();
void main(void)
{ int a[10];
ifstream infile;//定義輸入檔案類
ofstream outfile;//定義輸出檔案類
infile.open(“file1.txt”);//開啟一個輸入檔案“file1.txt”
outfile.open(“file2.txt”);//開啟一個輸出檔案“file2.out”
for(int i=0;i<10;i++)
infile>>a[i];//將“file1.txt”中的十個整型數輸入到a[i]中
for(i=0;i<10;i++)
outfile<<a[i]<<‘\t’;//將a[i]中的十個數輸出到檔案“file2.txt”中
outfile<<endl;
infile.close();//關閉輸入檔案
outfile.close();//關閉輸出檔案
}
當用類fstream定義檔案物件時,該物件即能定義輸入檔案物件,又能定義輸出檔案物件,所以開啟檔案時,必須在成員函式open()中的引數中給出開啟方式(讀或寫)。
在開啟檔案後,都要判斷開啟是否成功。若開啟成功,則檔案流物件值為非零值;若開啟不成功,則其值為0。
ifstream pfile1,pfile2;//定義了兩個檔案類的物件
pfile1.open(“file1.txt”, ios::in);
pfile2.open(“file2.txt”, ios::out);
if (!pfile1) //若為0,開啟檔案操作失敗
{cout <<”不能開啟輸入檔案:file1.txt”<<’\n’; exit(1);}
if (!pfile2)
{cout <<”不能開啟輸出檔案:file2.txt”<<’\n’; exit(1);}
開啟輸入檔案時,檔案必須存在。
開啟輸出檔案時,若檔案不存在,則建立檔案;若檔案存在,則刪除原檔案的內容,使其成為一個空檔案。
涉及到字串的檔案讀寫
char ch, str[300];
ifstream infile(“myfile1.txt”);
ofstream outfile(“myfiel2.txt”);
從檔案輸入一字元或一行字元,當輸入至檔案尾時,函式返回值為0,可以據此來判斷迴圈結束。
從鍵盤輸入一個字元:cin.get(ch);
從檔案輸入一個字元:infile.get(ch);
向顯示器輸出一個字元:cout.put(ch);
向檔案輸出一個字元:outfile.put(ch);
從鍵盤輸入一行字元:cin.getline(str,300);
從檔案輸入一行字元:infile.getline(ch,300);
二進位制檔案的讀寫操作
若在檔案的開啟方式中沒有特別說明,開啟的檔案均為ASCII碼檔案,若要開啟二進位制檔案,則要特別說明並用特定的讀寫函式。
由於二進位制檔案中的資料不是ASCII碼,故不能直接對其讀寫,必須要通過特定的函式予以轉換。
判斷二進位制檔案是否讀到檔案尾?
infile.eof( )
當到達檔案結束位置時,該函式返回一個非零值;否則返回零。
fstream infile;
infile.open(“data1.dat”,ios::in|ios::binary);
if(!infile) //判斷開啟是否出錯
{ cout<<“Open Error!\n”; exit(1); }
char str[300];
while(!infile.eof()) //判斷是否讀到檔案尾
infile.read(str, 300);
檔案指標
當一開啟檔案,檔案指標位於檔案頭,並隨著讀寫位元組數的多少順序移動。
可以利用成員函式隨機移動檔案指標。
隨機讀取二進位制檔案
infile.seekg(int);//將檔案指標移動到由引數指定的位元組處
infile.seekg(100);//將檔案指標移動到距離檔案頭100個位元組處
infile.seekg(100, ios::beg);//移動到距檔案頭100個位元組
infile.seekg(-100, ios::cur);//移動到距當前位置前100個位元組
infile.seekg(-500, ios::end);//移動到距檔案尾前500個位元組
相關文章
- c++入門:輸入輸出流C++
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- 輸入輸出流
- Java 輸入輸出流Java
- JAVA輸入輸出流Java
- C++ 中輸入輸出流及檔案流操作筆記C++筆記
- 【C++】輸入輸出C++
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- C++格式化輸入輸出C++
- 重學java中的輸入輸出流Java
- 詳解Java中的IO輸入輸出流!Java
- Java中資料輸入輸出流——DataInputStream和DataOutputStreamJavaAI
- java中基本輸入輸出流的解釋Java
- [java IO流]之 基本資料型別輸入輸出流Java資料型別
- 【C++】標準檔案的輸入輸出!!!C++
- [java IO流]之 鍵盤顯示器輸入輸出流(System)Java
- 檔案輸入輸出處理(二)-位元組流
- 【Java基礎知識】IO流--標準輸入輸出流、列印流PrintStreamJava
- 輸入輸出
- C++中的檔案輸入/輸出(4):檢測輸入/輸出的狀態標誌 (轉)C++
- C++ 學習筆記之——輸入和輸出C++筆記
- C++輸入輸出常用格式(cin,cout,stringstream)C++
- 字元輸出流_Writer類&FileWriter類介紹和字元輸出流的基本使用_寫出單個字元到檔案字元
- C++名稱空間、標準輸入輸出、引用C++
- 執行緒間的協作(3)——管道輸入/輸出流執行緒
- C++ 資料輸入cin (解決CLoin輸入中文程式出錯)C++
- 資料流輸出
- 輸入輸出系統
- 如何把檔案輸出流替換成位元組輸出流
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- C++筆記:輸入輸出、變數、變數加減乘除C++筆記變數
- 資料的輸入輸出
- Java —— 標準輸入輸出Java
- 排序,檔案輸入輸出排序
- 03 資料輸入-輸出
- Python 輸入和輸出Python
- Python的輸入輸出Python
- 檔案操作-輸入輸出