这是以下代码应该做的事情。它应该读取已被用户输入到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