【问题标题】:Is there a character that can be used as a delimiter for EOF?是否有可以用作 EOF 分隔符的字符?
【发布时间】:2018-07-31 10:15:57
【问题描述】:

我编写了一个函数,该函数对从文件中读取的行进行拼写检查,该文件将文件流和分隔符作为参数。我的问题是该函数需要一个分隔符,但是在阅读最后一行时,我没有。我会使用文件的最后一个字符,但我需要最后一个字符来进行拼写检查。

有没有办法使用EOF宏作为分隔符?

【问题讨论】:

  • 请发布您的代码,最好是minimal reproducible example
  • 函数“需要分隔符”是什么意思?这是 C++,所以大概你使用的是std::string,所以字符串的结尾非常适合作为“结束”指示符。
  • 那么,您重新发明了std::getline 并增加了一些拼写检查?如果是这样,我会努力模仿它的行为。当在分隔符之前遇到流结束时,所消耗的都是“行”。 IE。最后的分隔符是可选的。存在最终分隔符的情况,遇到 then end-of-stream 通常比您引用的情况更成问题。
  • 我会说不。返回 EOF 值的函数返回的是 int 类型,而不是 char
  • 您的问题是您未公开的函数未正确编写。您不需要通过添加所谓的“EOF 分隔符”来使事情进一步复杂化。你只需要修复你的代码。有很多现有的方法可以正确读取行,包括未终止的最终行。无需重新发明轮子。

标签: c++ io filestream spell-checking


【解决方案1】:

通常,您可以让流以任何适当的平台相关方式(无论是文件结尾,还是 Linux 终端模拟器上的 Ctrl+D)接收到 EOF 信号的时间来告诉您。

因此,当您点击自定义分隔符时停止读取,当尝试从流中读取设置流的 EOF 位时。无论如何,您都应该检查流的状态——如果出现错误怎么办?此时您将永远循环播放。

无论如何,std::getline 和 co 就是这样做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 2010-10-25
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多