[英]Why is the failbit being set. File seems to have printed fine
我有一段代碼可以完成預期的工作,但是我對故障位有疑問。 盡管文件顯示在屏幕上,捕獲塊始終運行。 當到達eof時,為什么要設置故障位? 也許我不了解故障位的正確含義。
int main()
{
ifstream infile;
char c;
infile.exceptions ( ifstream::failbit );
try
{
infile.open("../Dose.c", ios::in);
while (!infile.eof())
{
c=infile.get();
cout << c;
}
infile.close();
}
catch(ifstream::failure e)
{
cout << infile.eof() << " " << infile.fail() << " " << infile.bad() << " " << infile.good() ;
cerr << " Exception opening/reading/closing file\n";
}
return 0;
}
輸出:1 1 0 0異常打開/讀取/關閉文件。 因此很明顯,fail()和eof被設置。
27.5.5.4,第7段:
bool eof()const; 返回:如果在rdstate()中設置了eofbit,則返回true。
換句話說,eof()所做的只是檢查eofbit是否已設置。 它不會“主動”檢查是否已到達文件末尾。
跳過一堆干燥,正式的規范,發生的事情是在get()內部檢測到文件條件的結尾。 首先設置eofbit,然后設置failbit(get()操作失敗)。 因為啟用了異常,所以設置故障位的行為將引發異常。 如果未啟用異常,則get()將返回traits :: eof()(通常為-1),而不是從文件中讀取的字符。
帶走:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.