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

标签 c++ string stream

这就是下面这段代码应该做的。它应该读取用户输入到 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/

相关文章:

Java - 使用 Mac 和 Windows x86 和 x64 进行网络摄像头拍摄/视频

python - 从 FTP python 读取缓冲区中的文件

php - Stream_socket_client 无法连接(连接超时)

c++ - 创建临时 vector

c++ - 无法在 Intel Xeon Phi 上执行二进制错误

python - 如何在 Python3 中将 'binary string' 转换为普通字符串?

Python 根据句子列表中的特定条件剥离单词

c++ - 如何使用 QModelIndex 访问 QTreeView 中的 childWidgets?

c++ - 是否有 C++ 函数来检查字符串之间的相似性?

用于将字符串转换为元组的正则表达式