是否可以在org-mode中使用Babel来评估“cin”涉及的代码块?

时间:2016-05-04 12:54:27

标签: emacs org-mode babel

我知道我们可以使用Babel来评估org-mode中的代码块。但似乎巴贝尔无法处理“cin”。喜欢这个

int a;std::cin >> a;std::cout << a;

Babel不要求我输入a的值,并输出值0。

Babel可以解决这个问题吗?或者其他一些工具可以做到这一点。

1 个答案:

答案 0 :(得分:3)

我可以想到两种不同的方法。第一种方法是在主目录中创建一个类似input.data的文件,其内容为4。这将提供给std::cin。然后,按如下方式编写代码:

#+begin_src C++ :results output :includes <iostream> :cmdline < ~/input.data
int a;
std::cin >> a;
std::cout << a;
#+end_src

#+RESULTS:
: 4

第二种方法更有趣的是使用一点lisp代码进行交互:

#+name: input
#+begin_src elisp
(completing-read "Enter a number: " nil)
#+end_src

#+begin_src C++ :results output :var input=input
#include <iostream>
#include <string>

int main() {
    int a = std::atoi(input);
    std::cout << a;
}
#+end_src

#+RESULTS:
: 3

在这种方法中,系统会在emacs内部提示您输入一个号码,该号码将在C++代码中使用。