Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的字符串流是空的?_C++_String_Stream - Fatal编程技术网

C++ 为什么我的字符串流是空的?

C++ 为什么我的字符串流是空的?,c++,string,stream,C++,String,Stream,这就是下面的代码应该做的。它应该读取用户输入到int中的流(称为lineStream)中的信息。数据应该是单个数字或单词“all”。如果两者都不是,我应该通知用户这是一个错误 不过,情况就是这样:当用户输入一个数字时,一切正常。但是,当他输入单词“all”时,流失败了(正如预期的那样,因为我正在将它读入int)。当这种情况发生时,我尝试将流中的信息读入字符串(“stringstream”),并检查用户是否输入了“all”。但是,即使用户输入了“all”,当我在失败后尝试读取时,流也只输出“”(空

这就是下面的代码应该做的。它应该读取用户输入到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谢谢,修复了它。将您的评论作为答案发布,我将接受它。