rdstate()返回值是什么意思?

2024-05-11

istream& Read(istream &is)
{
    std::string buf;
    while (is >> buf)       
    {   
        cout << is.eofbit << " " << is.failbit << " " << is.badbit << endl;
        cout << is.rdstate() << endl;
        cout << buf << endl;
    }
    cout << is.eofbit << " " << is.failbit << " " << is.badbit << endl;
    cout << is.rdstate() << endl;
    is.clear();
    cout << is.eofbit << " " << is.failbit << " " << is.badbit << endl;
    cout << is.rdstate() << endl;
    return is;
}

如果我输入“test”等普通字符,输出为1 2 4 0.
然后我输入 CTRL+Z (Windows),输出是1 2 4 3 1 2 4 0.

问题 : 1. 做什么rdstate()返回值是什么意思? (为什么它输出3,而不是2?不是1?)

  1. 为什么不is.eofbitand is.failbit我输入 CTRL+Z 后会发生变化吗? (作为C++ 入门第五版说,到达文件结尾同时设置 eofbit 和 failurebit )

会员std::ios::rdstate()简单地返回状态标志的组合std::ios_base::badbit, std::ios_base::eofbit, and std::ios_base::failbit。在哪些条件下设置哪些位并不完全一致,但其意图如下:

  1. std::ios_base::badbit当流真正处于功能失调状态并且您[可能]不会从中得到任何东西时,就会设置该值。例如,如果没有流缓冲区或流上的任何操作引发异常,则设置此标志。
  2. std::ios_base::failbit当输入操作失败时设置,例如,因为格式化输入操作获得了意外的字符。通过清除该错误、忽略几个字符并重试,也许可以从该错误中恢复。
  3. std::ios_base::eofbit当达到[当前] EOF 时(即暂时无法提取更多字符时)被设置。

现在,在您的情况下,您输入了一个字符串并成功读取它,即没有设置标志。请注意,阅读以换行符停止,即您确实输入了"test\n"流提取了这五个字符。当您结束流时,流在尝试读取字符串时达到 EOF,即,它设置std::ios_base::eofbit and输入失败也设置std::ios_base::failbit.

如果你只想看std::ios_base::eofbit设置,您可以通过使用以流末尾的单词结尾且没有任何后续空格字符的流来执行此操作。获得这样的流的一个简单方法是使用std::istringstream并从中读出:

std::istringstream in("test");
Read(in);

另一个简单的设置是看std::ios_base::badbit设置:您只需创建一个没有流缓冲区的流,例如:

std::istream in(0);
Read(in);

请注意,该流最初将具有std::ios_base::badbit设置并获得std::ios_base::failbit尝试读取字符时设置。后clear()ing the std::ios_base::badbit但仍将被设置。

To get std::ios_base::failbit设置而不同时具有std::ios_base::eofbit设置您需要防止它看到非空白字符:输入运算符std::string默认情况下,开始时会跳过空格,然后读取,直到到达空格或 EOF,如果可以读取至少一个非空格字符,则说明成功。一种方法是关闭自动跳过空白,例如:

std::istringstream in("test test");
Read(in >> std::noskipws);

顺便说一句,请注意,不能保证以下值std::ios_base::eofbit, std::ios_base::failbit, or std::ios_base::badbit除了它们可以以某种形式用作位掩码之外。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rdstate()返回值是什么意思? 的相关文章

  • 语言混合:模型和视图

    考虑开发一个应用程序 其中模型将使用 C 使用 Boost 编写 视图将使用 Objective C 使用 Cocoa Touch 编写 哪里有一些示例展示了如何集成 C 和 Objective C 来开发 iPhone 应用程序 直接从源
  • 警告:从指针目标类型中丢弃“const”限定符

    没有const char s意味着 s 是一个指向常量 char 的指针 那么为什么它给我这个警告 我并不是想改变价值观 在第一个函数中警告是return discards const qualifiers from pointer tar
  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • 实体框架中的重复键异常?

    我试图捕获当我将具有给定用户名的现有用户插入数据库时 引发的异常 正如标题所说 我正在使用 EF 当我尝试将用户插入数据库时 引发的唯一异常是 UpdateException 如何提取此异常以识别其是否是重复异常或其他异常 catch Up
  • 从 .Net 将简单数据插入 Excel 文件的最简单方法

    我有一个 Excel 文件 大约有 10 列和 1 20 行 我需要插入 1 20 行包含各种数据元素 我想知道是否有一种方法可以将一些标签放入 Excel 文件中 以便可以找到并替换它们 将列标记为 名称 的东西 这样我就可以在代码中说
  • 为什么 LinkedList 通常比 List 慢?

    我开始在我的一些 C 算法中使用一些 LinkedList 而不是列表 希望能够加快速度 然而 我注意到他们只是感觉更慢 像任何优秀的开发人员一样 我认为我应该尽职调查并验证我的感受 所以我决定对一些简单的循环进行基准测试 我认为用一些随机
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • C++ 模板参数类型推断

    我有一个这样的C 模板 template
  • initializer_list 和默认构造函数重载决策

    include
  • 使用对象列表构建树

    我有一个带有属性 id 和parent id 的对象列表 我想建造一棵树来连接那些孩子和父母 1 个父对象可以有多个子对象 并且有一个对象将成为所有对象的祖先 实现该功能最快的算法是什么 我使用 C 作为编程语言 但其他语言也可以 像这样的
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • .NET 的 HttpWebResponse 是否会自动解压缩 GZiped 和 Deflated 响应?

    我正在尝试执行一个接受压缩响应的请求 var request HttpWebRequest HttpWebRequest Create requestUri request Headers Add HttpRequestHeader Acc
  • printf 参数不足

    我的问题是关于缺少参数的 printf 之后的行为 printf s blah blah d int integer was given as argument and not int written 我已经知道 如果格式参数不足 则行为是
  • 为什么从绑定返回的对象会忽略额外的参数?

    假设我有一个带有两个参数的函数 void f int x int y 我想绑定其中之一 我可以用std bind如下 auto partiallyBoundF std bind f 10 1 partiallyBoundF仅需要一个参数 但
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐