Я хотел бы оценить блоки исходного кода в режиме org в C ++, содержащие инструкции "cin", но я не могу найти способ провести интерактивную оценку (с пользовательским вводом) во время оценки. Пример кода:
#+BEGIN_SRC C++ :results output :export code :tangle myfile.cpp
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
cout<<a+1;
}
#+END_SRC
Можно ли проводить такую интерактивную оценку или моделировать (предоставляя исходному коду поддельный ввод)?
:var varname=value
в шапке. Во втором случае вы все еще можете использовать:var
, но вместо значения используйте другой блок кода с функцией ELisp, который запрашивает ввод.Ответы:
Нравится:
Создайте файл
in.txt
в том же каталоге, что и файл Org, с содержимым10
.источник
Вы можете попросить Emacs получить интерактивный ввод, используя именованный
elisp
блок. Затем передайте собранное значение в блок souce C ++, используя:var c-variable=block-name
синтаксис:Обратите внимание, что выходные данные исходных блоков передаются в виде строк, поэтому мы должны преобразовать их в целое число, следовательно,
atoi
и дополнительные#include
.источник
Спасибо @ abo-abo за вашу помощь. Я последовал вашему предложению, которое является правильным, и даже немного улучшил его, чтобы редактировать только мой файл org (и автоматически создавать внешний входной файл). Идея состоит в том, чтобы создать блок внешнего кода (здесь сценарий bash с именем build_input_file), который создает файл данных, и автоматически вызывать его перед оценкой другого блока благодаря
:var tmp=build_input_file
.источник