程式碼示例:
ofstream ofs("a.txt");
int n = 1;
while (--n) { //不進入迴圈體
ofs<<n<<"\t";
}
ofs.close();
int x=5,z = 0;
ifstream ifs("a.txt");
while (!ifs.eof())
{
cout<<ifs.eofbit<<endl; //輸出1
x=ifs.get(); -------------》》輸出-1,此時ifs指向檔案結束符,所以若直接用get()取出,則會出錯,出錯的表示形式就是輸出為-1,所以這個-1表示的是這是一個表示檔案結束符,沒有其他的數值含義。
// ifs>>x; ----------------》》 輸出為5,這種寫法與x=ifs.get()不同,在這種形式下,ifs指向檔案結束符,所以ifs並沒有實際的值,將ifs檔案流取到的值賦給x,因為ifs沒有值,所以此時x保持不變。
++z;
cout<<x<<"\t"<<flush;
ifs.close();
可知此時由於n=1,導致a.txt是空的,但是在從a.txt讀時,首先判斷ifs是否為EOF,程式這時進入迴圈,說明不是EOF,並讀出此時eofbit為1(true),輸出讀取的值。然後再從新判斷ifs是EOF,退出迴圈。
程式碼示例:
ofstream ofs("a.txt");
int n = 1;
while (--n) { //不進入迴圈體
ofs<<n<<"\t";
}
ofs.close();
int x=5,z = 0;
ifstream ifs("a.txt");
while (!ifs.eof())
{
cout<<ifs.eofbit<<endl; //輸出1
x=ifs.get(); -------------》》輸出-1,此時ifs指向檔案結束符,所以若直接用get()取出,則會出錯,出錯的表示形式就是輸出為-1,所以這個-1表示的是這是一個表示檔案結束符,沒有其他的數值含義。
// ifs>>x; ----------------》》 輸出為5,這種寫法與x=ifs.get()不同,在這種形式下,ifs指向檔案結束符,所以ifs並沒有實際的值,將ifs檔案流取到的值賦給x,因為ifs沒有值,所以此時x保持不變。
++z;
cout<<x<<"\t"<<flush;
}
ifs.close();
可知此時由於n=1,導致a.txt是空的,但是在從a.txt讀時,首先判斷ifs是否為EOF,程式這時進入迴圈,說明不是EOF,並讀出此時eofbit為1(true),輸出讀取的值。然後再從新判斷ifs是EOF,退出迴圈。