先看下面的程式
#include#includeusing namespace std;
int main()
{ ofstream outfile("test.txt");
outfile<<"abcdefg";
outfile.close();
char c;
ifstream infile("test.txt");
while(!infile.eof())
{ infile>>c;
cout<
其輸出是" abcdefgg ",可以發現輸出了兩個「 g 」,這是什麼原因呢?
1、檔案指標
當開啟乙個檔案時,對檔案輸入流來說,指標指向的是當前讀取字串的下一位,每讀一位,指標就往下移一位。
2、關於eof
大家通常誤認為檔案結束符eof是從檔案讀取的乙個字元,其實不然,eof被定義為int型的乙個負數(比如-1)。eof也不是檔案中實際存在的內容,而是檔案流的狀態標誌。在c++中,當讀取檔案失敗才產生eof,所以當輸出第一「 g 」時,產生eof,輸出第二個「 g 」時,讀取到eof,迴圈結束。
3、解決方案
將判斷迴圈結束的方式改為「 infile.peek() != eof 」。
infile.peek() 其返回值是乙個char型的字元
,其返回值是指標
指向的當前字元,但它只是觀測,指標仍停留在當前位置,並不後移。
修改程式如下:其輸出結果是」abcdefg「
#include#includeusing namespace std;
int main()
{ ofstream outfile("test.txt");
outfile<<"abcdefg";
outfile.close();
char c;
ifstream infile("test.txt");
while(infile.peek() != eof)
{ infile>>c;
cout<
注:程式修改之後,若輸入字串最後有乙個空格符或換行符,則輸出結果是"abcdefgg",因為輸出"g"時,檔案還沒有結束(還有乙個空格符或換行符),而peek()函式不會刪除之前快取區里的字元"g",所以迴圈繼續,輸出的還是"g"。 C 如何輸入檔案結束符(end of file)
當我們使用乙個istream物件作為條件時,其效果是檢測流的狀態。如果流是有效的,即流未遇到錯誤,那麼檢測成功。當我們遇到檔案結束符 end of file 或遇到乙個無效輸入時 例如,讀入的值不是乙個整數時 istream物件的狀態會變為無效。處於無效狀態的istream物件會使條件變為假。inc...
檔案結束符
初學c 一道例題 使用者輸入一組數,在輸出資訊中顯示共輸入多少個負數。include using namespace std int main cout 當使用istream物件作為條件,結果是測試流的狀態。如果流是有效的,也就是說,如果讀入下乙個輸入是可能的,那麼測試成功。遇到檔案結束符或遇到無效...
C 檔案結束符
問題描述 windows下 int main string str while cin str cout n end 控制台輸入多個字串後,輸入檔案結束符crtl z,並未使while迴圈結束,該如何跳出while迴圈?解決方法 方法1 回車 ctrl z 回車方法2 改 設定自己的檔案結束符 st...