輸入輸出
要做程式設計練習,了解基本的輸入輸出操作是必須的。
c++裡輸入輸出分c和c++兩部分。c風格的printf系列函式、file、fopen、fread、fwrite等等或c++風格的istream、ostream、iostream、ifstream、ofstream、fstream等都可以完成輸入輸出操作 。
c++風格:參考**:
c++學習筆記之輸入、輸出和檔案
一、流的概念
1.資料從記憶體的乙個位址移動到另乙個位址稱為資料流動——流操作
2.流操作是通過緩衝區(buffer)機制實現的。
3.緩衝區:記憶體的一塊區域——用作檔案與記憶體交換資料。
4.資料從檔案中讀出:檔案 → 緩衝區 → 記憶體
5.將資料寫入檔案:記憶體 → 緩衝區 → 檔案
為什麼要使用緩衝區而不直接從檔案中讀取資料到記憶體或者直接有記憶體寫入檔案呢?我們的檔案通常都存在磁碟中,程式從磁碟讀取乙個字元需要大量的硬體活動,速度非常慢。緩衝方法則從磁碟上讀取大量資訊,將這些資訊儲存在緩衝區,然後每次從緩衝區裡讀取乙個位元組,因為從記憶體中讀取單個位元組的速度比從硬碟上讀取快很多,所以這種方法更快,也更方便。說了這麼多,只需知道緩衝方法更高效就可以了。
二、流庫(stream library)介紹
使用繼承的方法建立的輸入輸出類庫,包含兩個平行的基本類:streambuf和ios類,所有流類均以兩者之一作為基類。
本文主要介紹ios,因為ios是程式設計中幾乎必用的類,而streambuf類很少直接使用。下面來自網路:
三、檔案開啟與關閉
1.當程式中進行檔案操作時,應加上標頭檔案「fstream」
2.若要開啟檔案進行相應的操作,必須定義相應的流物件。如:ifstream in; // 檔案輸入流物件,ofstream out; // 檔案輸出流物件, fstream both; // 檔案輸入/輸出流物件
檔案開啟用成員函式open();
原型 void(const char * s, ios_base::openmode, mode = ios_base::out|ios_base::trunc)
第乙個引數表示開啟檔案的路徑,第二個引數表示檔案開啟方式,第三個引數表示訪問方式, 標誌
含義ios::ate
開啟檔案並移動到檔案尾
追加到檔案尾
ios:in
作為輸入檔案(ifstream預設)
ios::out
作為輸出檔案(ofstream預設)
ios::trunc
若檔案存在,清除檔案內容(預設)
ios::nocreate
若檔案不存在,返回錯誤
ios::noreplace
若檔案存在,返回錯誤
ios::binary
檔案開啟的方法:
方法一:先定義乙個檔案流物件,再用檔案流物件呼叫成員函式open( )開啟乙個檔案。如:ifstream f1; //
定義檔案輸入流物件f1
f1.open( 「d:\\vcprg\\7-3.cpp」);//
開啟d盤vcprg資料夾(目錄)下的7-3.cpp檔案,可進行檔案讀操作
//從檔案中讀入記憶體,所以用輸入流物件
方法二:在定義檔案流物件時利用建構函式開啟檔案。如:
ifstream f1( 「d:\\vcprg\\7-3.cpp」)
用檔案流物件開啟檔案後,該物件就代表了被開啟的檔案。
#include
#include
using namespace std;
void main(void)
cout << endl;
f1.close(); //關閉檔案}
檔案訪問方式:
當用ifstream定義流物件並開啟乙個檔案時,預設為ios_base::in方式;
當用ofstream定義流物件並開啟乙個檔案時,預設為ios_base::out方式;
當用fstream定義流物件並開啟乙個檔案時,應給出開啟方式(可用「位或」運算以多種方式開啟檔案)如:
1 fstream f;
2 f.open(「file.cpp」,ios_base::in|ios_base::out)
例:將d盤inouttemplate資料夾(目錄)下的7-3.cpp檔案,複製為text.txt檔案。
#include
#include
using namespace std;
void main(void)
if(!檔案流物件.fail())
(3)用成員函式good()
if(!檔案流物件.good())
if(檔案流物件.good())
(4)較新的c++實現提供了一種更好的方式is_open()方法,推薦用此方法,但是老式c++沒有實現這種方法,用上面三種均可
檔案的關閉:
格式:檔案流物件.close();
關閉檔案操作包括把緩衝區資料完整地寫入檔案,新增檔案結束標誌,切斷流物件和外部檔案的連線
若流物件的生存期沒有結束,可以重用
當乙個流物件的生存期結束,系統也會自動關閉檔案
四、檔案讀寫
方法get(char&)和get()提供不跳過空白的單字元輸入功能;
方法put(char&)和put()提供不跳過空白的單字元輸出功能;
函式get(char*,int,char)和getline(char*,int,char)在預設情況下讀取整行;
二進位制檔案的讀寫:
二進位制檔案的讀/寫分別用成員函式read( )、write( )實現
寫二制檔案的格式,輸出檔案流物件.write((char*)&物件或&物件陣列名[下標],sizeof(物件名或所屬類名));
讀二進位制檔案的格式,輸入檔案流物件.read((char*)&物件或&物件陣列名[下標],sizeof(物件名或所屬類名));
、總結以二進位制方式開啟
C 輸入輸出
一 標準輸入函式cin 不知道說它是個函式對還是不對,它是代表標準的輸入裝置 鍵盤。他是屬於流的,他的用法和流的用法是一樣的。也就是 cin 變數 小小的說明一下,輸入多個變數可以寫在一行,如 cin x y z 這樣寫不是不允許,而是不好看,如果是不同的變數型別,那就更是沒頭沒腦了。除了你,人家是...
C 輸入輸出
c語言不提供輸入輸出語句,輸入輸出操作有函式來實現。c的標準庫函式中提供了許多輸入輸出函式,如printf scanf 等,使用時需要新增相應的標頭檔案 scanf d num 逗號前為控制語句,後半部分為變數的位址。當中 d是輸入格式控制字串 scanf 函式在接受輸入資料是預設不採集空格,回車,...
C 輸入輸出
c 中的一些常用輸入輸出 include include include include using namespace std void win io 由控制台輸入 void file io 檔案進行輸入 in file.close void file io 2 in file.close in ...