这就是下面这段代码应该做的。它应该读取用户输入到 int 中的流(称为 lineStream)中的信息。数据应该是单个数字或“全部”一词。如果两者都不是,我应该通知用户这是一个错误。
但实际情况是这样的:当用户输入数字时,一切正常。但是,当他输入“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;
}
最佳答案
一旦处于故障状态,如果不以某种方式清除故障状态,您几乎无法使用 iostream 执行任何操作。在这种情况下..
int nameofnode;
if (!(lineStream >> nameofnode))
{
lineStream.clear(); // <<==== HERE
string streamString;
if (lineStream >> streamString && 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;
}
关于c++ - 为什么我的字符串流是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153638/