一、格式化輸出與i/o流函式
1、格式化輸出
//設定域寬控制符setw(n),所謂域寬即資料所佔的總字元數;
//要包含標頭檔案,setw()的預設為setw(0),按實際輸出;
//如果輸出的數值占用的寬度超過setw(int n)設定的寬度,則按實際寬度輸出;
#include #include int main()
output:
a//輸出的字元'a'前面有兩個空格,即輸出共3個字元數
0.12345//寬度超過setw(int n)設定的寬度,則按實際寬度輸出;
//設定浮點精度控制符:setprecision(int n)
//控制顯示浮點數的有效位,n代表數字總位數;
#include #include int main()
vs output:
2.42857
2.45857
22.4
//設定填充字元控制符:setfill(c)
//設定填充字元,即"<<"符號後面的資料長度小於域寬時,使用什麼字元進行填充;
#include #include int main()
output:
****a//輸出位寬總共5位,其中前四位用『*』填充;
在檔案操作中格式化輸入/輸出
控制符用途
setw(width)
設定輸出欄位的寬度(僅對其後的第乙個輸出有效)
setprecision(n)
設定浮點數的輸入/出精度(總有效數字個數等於n)
fixed
將浮點數以定點數形式輸入/出(其中小數點後有效數字個數等於setprecison指定的n)
showpoint
將浮點數以帶小數點和結尾0的形式輸入/出,即便改浮點數沒有小數部分
left
輸出內容左對齊
right
輸出內容右對齊
hexfloat/defaultfloat
c++11新增:前者以定點科學計數法的形式輸出十六進製制浮點數,後者還原預設浮點格式
get_money(money)
put_money(money)
c++11新增;從流中讀取貨幣值,或者將貨幣值輸出到流。支援不同語言和地區的貨幣格式。
get_time(tm,format)
put_time(tm,format)
c++11新增;從流中讀取日期時間值,或者將日期時間輸出到流。
2、用於輸入/輸出流的函式
>>運算子用空格分隔資料
//讀如下檔案內容:
//li lei#han meimei
#include int main()
vs output:
li//上述例子正說明『>>』碰到空格就返回;
讀上述檔案可以使用getline()函式;getline函式有以下兩種形式:
a、成員函式getline(char* buf, int size, char delimiter);
//member function
#include #include #include int main()
; constexpr int size;
std::arrayname{};
while(!ip.eof())
system("pause");
return 0;
}
b、非成員函式:std::getline(istream& is, string& str, char delimiter);
//non-member function
#include #include #include int main()
; std::string name2{};
while(!ip.eof())
system("pause");
return 0;
}
get()和put()讀寫單個字元;
get()有以下兩種形式:int istream::get()和istream& get(char& c)
//利用get()函式的兩種形式讀取字元;
#include #include int main()
; int n;
char c;
n = ip.get();//int istream::get();
ip.get(c);//istream& get(char& c);
std::cout << n << std::endl;
std::cout << c << std::endl;
return 0;
}
flush()可以將輸出流快取中的資料寫入目標檔案:ostream& flush();
同時std::cout << "hello" << std::flush()中的flush與endl類似。
二、二進位制輸入輸出
1、檔案的開啟模式(file open mode)
ofstream寫資料,ifstream讀資料,而fstream = ifstream + ofstream;當建立fstream物件時,應指定檔案開啟模式:
模式描述
ios::in
開啟檔案讀資料;
ios::out
開啟檔案寫資料;
ios::ate
開啟檔案,把檔案游標移到末尾。ate = at end
ios::trunc
若檔案存在則捨棄其內容,這是ios::out預設行為。trunc = truncate
ios::binary
開啟檔案以二進位制模式讀寫
一般在使用時都是幾種模式的組合
//開啟檔案,並追加資料;
#include #include int main()
2、二進位制輸入輸出簡介
文字檔案為一系列字元;二進位制檔案為一系列位元。
文字模式的讀寫是建立在二進位制模式讀寫的基礎上,只不過是將二進位制資訊進行了字元編譯碼。二進位制的讀寫無需資訊轉換。
檔案預設以文字模式開啟。
文字模式
二進位制模式
讀operator >>; get(); getline()
read()
寫operator <<; put();
write();
3、二進位制讀寫
二進位制讀寫函式原型:ostream& write(const char* s, std::streamsize count)
//
#include int main()
; char s = "beijing shanghai";
p.write(s, sizeof(s));
system("pause");
return 0;
}
如何將非字元資料寫入檔案呢?
首先要將資料轉換為位元組序列,即位元組流,再用write函式將位元組序列寫入檔案。
語法:reinterpret_cast(address)
//使用reinterpret_cast
#include #include int main()
; char* p = reinterpret_cast(&x);
int a[3];
char* p1 = reinterpret_cast(a);
std::string str;
char* p2 = reinterpret_cast(&str);
return 0;
}
二進位制檔案的讀操作用read()函式:istream& read(char* s, std::streamsize count);用法同write函式。
三、隨機訪問檔案
1、檔案位置指示器
檔案由位元組序列構成,檔案位置指示器是乙個特殊標記,它指向其中乙個位元組。讀寫操作都是從檔案位置指示器所標記的位置開始的。當開啟檔案,檔案位置指示器指向檔案頭,讀寫檔案時,檔案位置指示器會向後移動到下乙個資料項。
2、隨機訪問檔案
隨機訪問意味著可以讀寫檔案的任意位置。
讀檔案時用
寫檔案時用
獲知檔案定位器指到**
tellg();tell是獲知,g是get表示讀檔案
tellp();tell是獲知,p是put表示寫檔案
移動檔案定位器到指定位置
seekg();seek是尋找,g是get表示讀檔案
seekp();seek是尋找,p是put表示寫檔案
seek的用法
***_stream& seekg/seekp(pos_type pos);
***_stream& seekg/seekp(off_type off,std::ios_base::seekdir dir);
seekdir 檔案定位方向型別
解釋std::ios_base::beg
流的開始;beg = begin
std::ios_base::end
流的結尾
std::ios_base::cur
流位置指示器的當前位置;
eg:seekg(42l)將檔案位置指示器移動到檔案的第42位元組處;
seekg(10l, std::ios_base::beg)將檔案位置指示器移動到檔案開頭算起的第10位元組處。
檔案輸入輸出(二) 檔案的操作
file fopen char filename,char mode filename對應的實參是乙個字串,表示需要開啟的檔案的檔名 可以包括檔案的路徑 該實參可以是乙個字串常量,也可以是乙個字元指標 mode對應的實參也是乙個字串,對應了檔案的操作模式 r 以唯讀方式開啟乙個文字檔案,如果檔案不存...
2017 11 04 10檔案的輸入輸出,異常
檔案的輸入輸出,異常 1.檔案 2.異常 1.檔案的輸入輸出 1.開啟檔案open函式 open file option file是要開啟的檔案 option是可選擇的引數,常見有 mode等 2.檔案的開啟模式 r 制度模式,檔案不存在時會報錯 w 寫入模式,檔案存在會清空之前的內容,檔案不存在則...
python 16 檔案操作 輸入輸出
檔案操作分為三步 找到檔案 操作關閉按照編碼方式進行檔案的分類 使用方便 占用記憶體小 但是讀取速度慢 不允許跳躍讀取 二進位制檔案 把檔案儲存放在記憶體檔案中進行操作 分類 程式檔案 資料檔案 輸入檔案 輸出檔案文字檔案的操作 又叫ascci檔案 但是預設是編碼uncode編碼 開啟檔案 open...