读取超出 istringstream 字符串末尾的内容。
Reading beyond the end of an istringstream's string.
作为一名初级程序员,我试图理解书中的所有内容,但在理解我为了解其行为而编写的这段代码时遇到了一些问题。
假设我想将数据读取到一个字符串中,清理这些数据,然后将"清理过的"数据放入一个istringstream中,这样我就可以再次读取它:
string line;
getline(cin, line);
// clean up data....
istringstream ss(line);
vector<string> vs;
for (string word; ss >> word; )
vs.push_back(word);
现在,通过写这段代码,我想起了我书中的一句话:
如果您试图读取istringstream字符串的末尾,它将进入eof()状态。
因此,我尝试用两个if
条件测试for loop
之后的流,得到它都处于of()状态和fail()状态。流有可能同时处于这两种状态吗?为什么我会得到这个结果?如何在输入操作后正确地找到流的真实状态?我刚开始学习I/O流,遇到了一些问题。感谢您的帮助
您的流肯定有可能同时处于eof和失败状态。当你试图阅读超过流的末尾时,就会发生这种情况。这是在您完成从流中读取的所有内容并测试没有任何内容后流的正确状态。
这正是你的循环所做的,这样做是完全可以的。当你的流的位置超过了它的最后一个字符时,eof标志还没有设置。只要你试着多读一些,它就会被设置好。这是经过设计的。一旦您阅读了更多内容,就会设置eof和failed标志,这将导致循环终止,正如预期的那样。
您正在通过operator bool
检查流状态;现在,如果设置了failbit
或badbit
而不是eofbit
,则返回!this.fail()
,即true
。
当您到达EOF(即读取超过流的末尾)时,>>
和<<
的行为是设置eofbit
和failbit
。
如何在输入操作后正确地找到流的真实状态?
您已经在以正确的方式进行操作,即通过operator bool
——您可能想做的是查找iostate
及其访问器来进一步了解它。
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 将结构字段的类型展开为可变模板参数
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 私有字段对象与私有继承?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 声明没有默认构造函数的字段
- 如何将"固定"浮点字段用于 istream/istringstream?
- 如何通过字段读取和验证istringstream