最近在做c++的大作業中的小作業,用到檔案的地方很多。我也不是第一次用了,但是很久不用就是這麼不熟悉,時常會忘記很多細節。今天就在這裡總結一下。
1.檔案的輸入
ifstream fp_account("input.txt");
if(!fp_account)//若開啟失敗
int i=0;
string in;
while(fp_account.peek()!=eof)//????????????????
.......
今天在除錯的時候發現檔案怎麼都讀不進string in。後來經過各種排查,才發現檔案開啟失敗了。我很少遇到這樣的問題,所以在一開始沒有寫檔案開啟失敗的處理。結果這一偷懶耽誤了我太多時間。最後我找到開啟失敗的原因時已經呵呵了:那個檔案是input.txt.txt,圖形化顯示的時候沒顯示字尾,我把.txt當字尾了,其實人家是名字!!!
還有就是getline的問題。對於各種讀取字元、字串的操作,換行符會不會被丟棄是個很重要的細節,每次用的時候我都會查。我之前查到說getline(cin,str)是讀到換行符為止。後來發現其實是把換行符吃掉了。
2.檔案末尾的判斷
今天發現了乙個好函式,叫fp.peek()。它的作用是在輸入流中讀取乙個字元,若它不是eof則放回緩衝區,若是則跳出。用起來就像這樣:while(fp_account.peek()!=eof).
本來我用的是while(!fp_account.eof()),但它會多迴圈一次。因為「在這裡,大家可能有乙個誤區,認為eof()返回true時是讀到檔案的最後乙個字元,其實不然,eof()返回true時是讀到檔案結束符0xff,而檔案結束符是最後乙個字元的下乙個字元[1]。」
參考:[1]
C 的幾個輸入函式
學c 的時候,這幾個輸入函式弄的有點迷糊 這裡做個小結,為了自己複習,也希望對後來者能有所幫助,如果有差錯的地方還請各位多多指教 1 cin 2 cin.get 3 cin.getline 4 getline 5 gets 6 getchar 附 cin.ignore cin.get 跳過乙個字元,...
幾個輸入函式
1 cin 用法1 最基本,也是最常用的用法,輸入乙個數字 include using namespace std main 請輸入第1個字串 kskr1 請輸入第2個字串 kskr2 請輸入第3個字串 kskr3 輸出m 0 的值 kskr1 輸出m 1 的值 kskr2 輸出m 2 的值 ksk...
C 輸入常用函式
c 常用輸入有 cin cin.get cin.getline c常用輸入 getline gets 1 cin 相當於scanf 功能 輸入字串到字元輸出,遇空格 tab 回車結束 輸入字串到字元陣列 include using namespace std void main 輸入 ab cd 陣...