![](/img/trans.png)
[英]Way to detect number rather than letter from string. (using istringstream currently)
[英]Reading beyond the end of an istringstream's string.
作為一名初級程序員,我試圖理解我書中的所有內容,但是在理解我為查看其行為而編寫的這段代碼時遇到了一些問題。
假設我想將數據讀入一個字符串,清理這些數據,然后將“清理過的”數據放入 istringstream 中,以便我可以再次讀取它:
string line;
getline(cin, line);
// clean up data....
istringstream ss(line);
vector<string> vs;
for (string word; ss >> word; )
vs.push_back(word);
現在,通過編寫這段代碼,我想起了我書中的一句話:
如果您嘗試讀取 istringstream 字符串的末尾,它將進入 eof() 狀態。
所以我嘗試用兩個if
條件測試for loop
之后的流,我得到它既處於eof() 狀態又處於fail() 狀態。 流是否可能同時處於這兩種狀態? 為什么我得到這個結果? 如何在輸入操作后正確找到流的真實狀態? 我剛剛開始學習 I/O 流,但遇到了一些問題。 感謝您的幫助
您的流絕對有可能同時處於 eof 和 failed 狀態。 當您嘗試閱讀流的末尾時會發生這種情況。 這是在您讀完所有內容並測試沒有任何剩余內容后流的正確狀態。
這正是您的循環所做的,並且絕對可以這樣做。 當您的流定位在其最后一個字符之后時,尚未設置 eof 標志。 一旦您嘗試閱讀更多內容,它就會設置。 這是設計使然。 一旦你讀了更多, eof 和 failed 標志都會被設置,這會導致循環終止,正如預期的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.