如何修复readline输入到输出流的输入

时间:2019-05-10 11:34:31

标签: c++ readline libreadline

我正在用C ++创建一个项目,任务是用readline.h库中功能更强大的readline()函数替换std :: getline,因为它包含了更多功能,并且在总体上将更有用。但是,我正在执行的程序会对其他“ in-X”文件进行多次测试,并生成“ out-X”文件,并检查输出结果以进行测试。

测试基本上是这样的

./a.exe < in-X.txt > out-X.txt

我遇到的问题是readline()函数似乎将它从输入中读取的行打印到输出文件,因此基本上我生成的所有“ out-X”文件都包含所有输入以及预期结果,并且那很麻烦。

我已经尝试了rl_redisplay()的许多组合,并没有解决方案使用rl_delete_text()。我也尝试过将终端管理功能(例如rl_prep_terminal(1)设置为原始模式和rl_deprep_terminal()),但似乎没有任何效果。我也无法尝试rl_tty_set_echoing(),因为我的程序似乎无法在库中找到它。

我试图尽可能减少问题,并提出了此简化代码

/* Standard include files. stdio.h is required. */
#include <string.h>
#include <iostream>
#include <stdlib.h>

/* Standard readline include files. */
#include <readline/readline.h>
#include <readline/history.h>

int main(int argc, char* argv[]) {
  char *buf;
  while ((buf = readline("Prompt>")) != nullptr) {
    std::string line(buf);
    if (buf)
      add_history(buf);


    std::cout << "Line : " << line << "\n";
  }

  return 0;
}

这很简单,打印readline()的提示不是问题,这是在输出中所期望的,但是打印已读取的“ buf”是问题。

基本上与in文件

a = 2
b = 3
1 + 2 + 3

我希望输出

Line : a = 2
Line : b = 3
Line : 1 + 2 + 3

但是我明白了

Prompt> a = 2
Line : a = 2
Prompt> b = 3
Line : b = 3
Prompt> 1 + 2 + 3
Line : 1 + 2 + 3
Prompt> 

最后一个包含EOF的“提示”是我可以处理或使用的,但是无法打印第一,三,五行。

0 个答案:

没有答案