如果ifstream :: getline調用沒有找到分隔符,我知道它設置了failbit,但它是否也清除了緩衝區,或者它是否保持緩衝區完好無損,並設置失敗位讓您知道?ifstream getline找不到delim
0
A
回答
0
似乎有是關於輸入流的不同狀態有些混亂(這是正確的,他們被混淆):
C++標準,表124
badbit
指示輸入或輸出序列中的完整性丟失(例如來自文件的不可恢復的讀取錯誤);eofbit
表示輸入操作到達輸入序列的末尾;failbit
表示輸入操作未能讀取預期字符,或輸出操作未能生成所需字符。
即,failbit
被設定時basic_istream::getline(char_type* s, std::streamsize count, char_type delim)
提取count-1
字符而沒有找到定界符(-1
用於對存儲在終止\0
)。這並不表示該流是bad
,但它表示getline
未能找到分隔符。在C++標準的basic_istream::getline
描述: [istream.unformatted]/18
- 效果:[...]構建崗哨對象[=準備輸入和錯誤檢查之後,提取字符並將它們存儲到數組的第一個元素由
s
指定的連續位置。 字符被提取並存儲,直到發生以下情況之一:
- 檔案結尾發生在輸入序列(在這種情況下,函數調用
setstate(eofbit)
);traits::eq(c, delim)
[=發現分隔符]用於下一個可用輸入字符c
(在這種情況下輸入字符被提取但未被存儲);n
小於一個或n - 1
字符被存儲(在這種情況下函數調用setstate(failbit)
)。 [...]- 這些條件按所示順序進行測試。
- 如果函數提取沒有字符時,它調用
setstate(failbit)
[...]- 在任何情況下,如果是
n
大於零,其然後存儲一個空字符[...]到的下一個連續的位置陣列。
[重視和遺漏礦]
0
從here:
在內部,該函數訪問由第一 構建哨兵對象(設置爲true noskipws)的輸入序列。然後(如果 好),它會從其關聯的流緩衝區對象 中提取字符,就像調用其成員函數sbumpc或sgetc一樣,最後在返回之前銷燬該哨兵對象。
似乎緩衝區被填充直到出現問題。 (見DYP的評論)
相關問題
- 1. ifstream getline問題
- 2. C++ ifstream getline不工作
- 3. 混合ifstream getline和>>
- 4. getline()與ifstream指針錯誤?
- 5. C++:使用ifstream和getline();
- 6. ifstream getline的分辨率
- 7. 不能包含ifstream「致命錯誤:'ifstream'文件未找到」
- 8. ifstream在Mac上找不到文件
- 9. ifstream無法找到文件
- 10. 與ifstream的使用函數getline沒有「函數getline」的實例參數列表
- 11. getline()得到不正確的字符
- 12. getline函數的工作不
- 13. 沒有得到線 - std :: getline
- 14. std :: getline不接受std :: back_insert_iterator
- 15. Ifstream trouble
- 16. 錯誤C3861:'getLine':標識符未找到
- 17. 無法使用std :: getline()與ifstream和ofstream一起工作
- 18. ifstream的,函數getline返回一個內存地址
- 19. ifstream getline問題(它只能讀取第一行)
- 20. 收到錯誤「沒有匹配函數調用'getline(std :: ifstream&,int&,char)'」
- 21. C++ ifstream I/O?
- 22. Java StringTokenizer - delim格式
- 23. 幾個ifstream與ifstream +不斷尋求
- 24. Getline不工作
- 25. 在C++中,u8R「delim(SomeTextInHere)delim」的含義是什麼?
- 26. 使用getline()而不設置failbit
- 27. getline()不讀取第一行
- 28. 爲什麼seekg不適用於getline?
- 29. Getline輸出不起作用?
- 30. Getline error undefined
它的葉子緩衝完好,containting'failbit'成立之前提取的。 – jrok