Gostaria de avaliar nos blocos de código-fonte do modo organizacional em C ++ que contêm instruções "cin", mas não consigo encontrar uma maneira de fazer uma avaliação interativa (com a entrada do usuário) durante a avaliação. Exemplo de código:
#+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
É possível ter uma avaliação interativa ou simular (fornecendo ao código fonte uma entrada falsa)?
:var varname=value
no cabeçalho. No segundo caso, você ainda pode usar:var
, mas no lugar do valor, use outro bloco de código com uma função ELisp que solicita entrada.Respostas:
Como isso:
Crie um arquivo
in.txt
no mesmo diretório que o arquivo Org, com conteúdo10
.fonte
Você pode solicitar ao Emacs para obter a entrada interativa usando um
elisp
bloco nomeado . Em seguida, passe o valor coletado para o bloco de código C ++ usando a:var c-variable=block-name
sintaxe:Note que as saídas dos blocos de origem são passadas como strings, então temos que convertê-lo em um número inteiro, daí o
atoi
e o extra#include
.fonte
Obrigado @ abo-abo por sua ajuda. Segui sua sugestão correta e até a aprimorei um pouco para editar apenas meu arquivo organizacional (e criar automaticamente o arquivo de entrada externo). A idéia é criar um bloco de código externo (aqui um script bash chamado build_input_file) que cria o arquivo de dados e chamá-lo automaticamente antes de avaliar o outro bloco graças ao
:var tmp=build_input_file
.fonte