C++ 为什么我的字符串流是空的?
这就是下面的代码应该做的。它应该读取用户输入到int中的流(称为lineStream)中的信息。数据应该是单个数字或单词“all”。如果两者都不是,我应该通知用户这是一个错误 不过,情况就是这样:当用户输入一个数字时,一切正常。但是,当他输入单词“all”时,流失败了(正如预期的那样,因为我正在将它读入int)。当这种情况发生时,我尝试将流中的信息读入字符串(“stringstream”),并检查用户是否输入了“all”。但是,即使用户输入了“all”,当我在失败后尝试读取时,流也只输出“”(空字符串)。有人知道为什么吗?谢谢C++ 为什么我的字符串流是空的?,c++,string,stream,C++,String,Stream,这就是下面的代码应该做的。它应该读取用户输入到int中的流(称为lineStream)中的信息。数据应该是单个数字或单词“all”。如果两者都不是,我应该通知用户这是一个错误 不过,情况就是这样:当用户输入一个数字时,一切正常。但是,当他输入单词“all”时,流失败了(正如预期的那样,因为我正在将它读入int)。当这种情况发生时,我尝试将流中的信息读入字符串(“stringstream”),并检查用户是否输入了“all”。但是,即使用户输入了“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-nameofnode;
lineStream>>节点名称;
if(lineStream.fail())
{
字符串流字符串;
lineStream>>streamString;
如果(streamString==“全部”){
如果(lineStream.peek()!=EOF){//参数太多
cout一旦处于失败状态,如果不以某种方式清除失败状态,您几乎无法对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;
}
int-nameofnode;
if(!(lineStream>>nameofnode))
{
lineStream.clear();//streamString&&streamString==“全部”){
如果(lineStream.peek()!=EOF){//参数太多
该流是否仍处于失败状态,在通过字符串而不是-int重新尝试提取之前,您从未清除过该状态。@WhozCraig如果该流处于失败状态,是否意味着我无法读取它?我想这只是意味着我不能使用它的任何函数。在清除失败状态之前,您无法对iostream执行任何操作。一个d你认为“从中读取”如果不是“使用它的任何功能”会做什么?提取运算符>>
只是使用流成员从流中提取格式化数据的前端。非常确定您正在寻找在字符串尝试之前调用该方法。@WhozCraig谢谢,修复了它。将您的评论作为答案发布,我将接受它。