成員函數istream& istream::getline(char* s, streamsize n, char delim);
使您能夠從數據流中提取字符,直到3件事情之一發生:的std ::函數getline:分隔字符與字符數
- 指定定界符被發現,
n - 1
字符從流中讀取,或- 一個EOF或錯誤時
顯然,條件3(出現錯誤)容易檢測到。但是,來電者如何區分條件(1)和(2)?你怎麼知道劃界角色是不是?可能有n - 1
個字符被讀取,但未找到分隔字符。
成員函數istream& istream::getline(char* s, streamsize n, char delim);
使您能夠從數據流中提取字符,直到3件事情之一發生:的std ::函數getline:分隔字符與字符數
n - 1
字符從流中讀取,或顯然,條件3(出現錯誤)容易檢測到。但是,來電者如何區分條件(1)和(2)?你怎麼知道劃界角色是不是?可能有n - 1
個字符被讀取,但未找到分隔字符。
根據http://en.cppreference.com/w/cpp/io/basic_istream/getline
在情況3中,setstate(eofbit)
將被執行。
在情況2中,setstate(failbit)
將被執行。
您可以使用std::istream::gcount()
來了解讀取的字符數,並將其與n
進行比較以找出您的問題的答案。另外,可以搜索輸出緩衝區來確定分隔符。
你可以不問這個問題。使用getline(std::basic_istream&, std::basic_string&, Elem delim);
。或者如果你使用C++ 11,那就是getline(std::basic_istream&&, std::basic_string&, Elem delim);
。也就是說,讀入std::string
。如果你這樣做,你不必處理數組大小。