這是以下代碼應該做的事情。它應該讀取已被用戶輸入到int中的流(稱爲lineStream)中的信息。數據要麼是一個單一的數字,要麼是「全部」。如果它不是,我應該通知用戶這是一個錯誤。爲什麼我的stringstream爲空?
雖然這是會發生的事情:當用戶輸入數字時,一切正常。當他輸入單詞「all」時,流失敗(因爲我正在將它讀入int)。當發生這種情況時,我嘗試將流中的信息讀入一個字符串(「stringstream」)並檢查用戶是否輸入了「all」。但是,即使用戶輸入「全部」,當我嘗試從失敗後讀取它時,流只輸出「」(空字符串)。有誰知道爲什麼?謝謝。
int nameofnode;
lineStream >> nameofnode;
if (lineStream.fail())
{
string streamString;
lineStream >> streamString;
if (streamString == "all") {
if (lineStream.peek() != EOF) { //Too many arguments
cout << "Error: too many arguments\n";
return;
}
cout << "Print: all nodes\n";
}
else
{
cout << "Error: Invalid argument";
}
return;
}
流仍處於失敗狀態,在重試提取字符串而不是-int提取字符串之前,您從未清除該字符串。 – WhozCraig 2014-10-02 02:32:58
@WhozCraig如果流處於失敗狀態,這是否意味着我無法讀取它?我認爲這只是意味着我不能使用它的任何功能。 – dfg 2014-10-02 02:33:44
直到失敗狀態被清除,你不能用iostream做很多*任何事情。如果不是「使用它的任何功能」,你認爲「從中讀取」是什麼?提取'operator >>'只是使用流成員從流中提取格式化數據的前端。很確定,在你的字符串嘗試之前,你正在尋找調用[** clear()**](http://en.cppreference.com/w/cpp/io/basic_ios/clear)的方法。 – WhozCraig 2014-10-02 02:36:20