代码之家  ›  专栏  ›  技术社区  ›  Crystal

正在检查值的ignore()。

  •  3
  • Crystal  · 技术社区  · 15 年前

    当你在C++中使用IGENORE()时,有没有一种方法来检查那些被忽略的值?我基本上是在读一些字符,想知道我是忽略了文本中的普通字符,还是先读了换行字符。谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   razlebe    15 年前

    我不相信-你得“自己滚”。

    换句话说,我认为您必须编写一些从流中读取的代码,使用 get() ,然后添加一些逻辑以保留所需内容并忽略其余内容(同时检查您忽略的内容)。

        2
  •  1
  •   sth    15 年前

    如果您不想忽略这些字符,请不要使用 ignore() 提取它们。 get() 可以执行相同的操作,但也可以存储提取的字符,以便以后检查它们。

        3
  •  0
  •   Steve Jessop    15 年前

    如果您提供 delim 参数到 ignore() ,然后它可以在换行符处停止:

    streampos old = is.tellg();
    is.ignore(num, '\n');
    if (is.tellg() != old + num) {
        // didn't ignore "num" characters, if not eof or error then we
        // must have reached a newline character.
    }
    

    不过,有一个障碍-什么时候 着火() 点击分隔符,它也会忽略这一点。因此,如果您恰好在一组被忽略字符的末尾命中分隔符,那么 tellg() 将返回 old + num . afaik无法判断最后一个被忽略的字符是否是分隔符。也无法指定不是单个字符的分隔符。

    我也不知道这是否和什么时候可能比仅仅阅读更快。 num 字节并搜索换行符。我最初的想法是,“ 着火() read() 不明显吗?”;-)