【问题标题】:Problem in detecting EOF (end of file) while giving input in a file via terminal通过终端在文件中输入时检测 EOF(文件结尾)的问题
【发布时间】:2020-02-22 23:26:43
【问题描述】:

我正在运行我的代码并通过 .txt 文件 (./a.out<input.txt ) 提供输入,但它似乎无法识别文件结尾。

当我在 ubuntu 中复制内容时,它可以工作。我认为文件是在 MAC 中创建的。

EOF 就像终端中的 CTRL+C 一样,因此它应该停止执行代码,但最后一个命令不断地被解析为输入。我无法更改文件(它是测试文件,格式不可更改。)。谁能帮我解决这个问题? 我附上了我的代码,但我认为这是文件问题。

编辑:我找到了解决方案。通过添加

if(!getline(cin, s)){
   break;
}

或类似的线路,问题将得到解决!

【问题讨论】:

  • 产生您的问题的minimal reproducible example 属于您的问题。我没有看到任何 c++ 代码,所以很难告诉你它可能有什么问题。
  • 首先,这在很大程度上取决于您使用的终端。传统上,Control-C 发送 SIGINT 或 SIGTERM(查一下,我太懒了 ATM)。触发 EOF 是相当的 Control-D。
  • 我添加了我的整个代码。但我认为这与文件格式有关。正如我在复制ubuntu文本文件中的内容时提到的,没有问题。
  • 在我使用的终端中,CTRL+C强制代码停止运行。
  • @Maryam 所以你看,你有很多与问题无关的代码。请创建一个最小可重现的示例。

标签: c++ c++11 ubuntu terminal eof


【解决方案1】:

我找到了解决方案。通过添加

if(!getline(cin, s)){
   break;
}

或类似的线路,问题将得到解决!

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2016-08-13
    • 1970-01-01
    • 2019-07-24
    • 2014-03-06
    相关资源
    最近更新 更多