230 likes | 341 Views
Chapter 7-2. 檔案管道. 為何要使用檔案 (files) ?. 之前談過,當宣告單一變數來輸入全班成績時 (chi,eng,math,avg,sum…) ,前一位同學的成績將被後一位同學的成績給覆蓋掉,無法查詢之前的個人成績 使用陣列後,查詢之前的成績已非難事,然而,無論是陣列或單一變數,都將面臨關機後資料即流失的命運 倘若能將資料以檔案型式儲存在磁碟中,即使關機也不怕資料流失. 如何將資料存入與讀出磁碟?. C++ 提供檔案輸入/輸出的類別,稱為檔案管道函數庫 fstream.h
E N D
Chapter 7-2 檔案管道
為何要使用檔案(files)? • 之前談過,當宣告單一變數來輸入全班成績時(chi,eng,math,avg,sum…),前一位同學的成績將被後一位同學的成績給覆蓋掉,無法查詢之前的個人成績 • 使用陣列後,查詢之前的成績已非難事,然而,無論是陣列或單一變數,都將面臨關機後資料即流失的命運 • 倘若能將資料以檔案型式儲存在磁碟中,即使關機也不怕資料流失
如何將資料存入與讀出磁碟? • C++提供檔案輸入/輸出的類別,稱為檔案管道函數庫 • fstream.h • fstream.h包含了iostream.h,因此,程式中含括了fstream.h後,無須再含括iostream.h • 類別 • ofstream支援檔案寫入 • ifstream支援檔案讀出 • fstream支援檔案寫入及讀出
字串的輸入 • 將字串寫入檔案中 • 宣告方式 ofstream 物件名稱(檔案名稱); ofstream outf("datafile.txt"); 物件名稱可以自訂,在程式中配合插入運算子(<<)使用
字串的輸入 (續) • 物件名稱的用法與cout類似 outf<<"Hello !"<<endl<<"Good-bye";
字串的輸出 • 將字串自檔案中讀出 • 宣告方式 • 物件名稱的用法與cin相類似 ifstream 物件名稱(檔案名稱); ifstream inf("datafile.txt"); 在程式中配合擷取 運算子(>>)使用 char buffer[80]; inf>>buffer;
字串的輸出(續) //假如檔案開啟失敗 為何分成這麼多列? 因為,擷取運算子會將空白字元當作結束字元之故
字串的輸出(續) • 若要正常顯示於螢幕上,可使用getline()函數
字元的輸入 • 將指定字元輸出至檔案的方法 • 物件名稱<<ch; • 物件名稱.put(ch);
字元輸出 • 自開啟的檔案中一次讀入一個字元給指定的字元變數的方法 • 物件名稱.get(ch); • ch=inf.get();
atoi(),itoa(),atol(),ltoa(),atof() • stdlib.h • atoi()文字轉換為整數 • atol()文字轉換為長整數 • atof()文字轉換為浮點數 • itoa()整數轉換為字串 • ltoa()長整數轉換為字串
Homework • 以檔案儲存M1及M2兩個二維陣列,寫一程式讀出此檔案中的陣列,並進行陣列相加(M1+M2),將結果存入M3陣列中,並於螢幕顯示其結果