Me gustaría evaluar en modo org los bloques de código fuente en C ++ que contienen instrucciones "cin", pero no puedo encontrar una manera de tener una evaluación interactiva (con la entrada del usuario) durante la evaluación. Ejemplo 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
¿Es posible tener una evaluación tan interactiva o simular (dando al código fuente una entrada falsa)?
:var varname=value
en el encabezado. En el segundo caso, aún podría usar:var
, pero en lugar de valor, use otro bloque de código con una función ELisp que solicite entrada.Respuestas:
Me gusta esto:
Cree un archivo
in.txt
en el mismo directorio que el archivo Org, con contenido10
.fuente
Puede pedirle a Emacs que obtenga la entrada interactiva utilizando un
elisp
bloque con nombre . Luego pase el valor recolectado al bloque de fuente C ++ usando la:var c-variable=block-name
sintaxis:Tenga en cuenta que las salidas de los bloques de origen se pasan como cadenas, por lo que tenemos que convertirlo en un entero, de ahí el
atoi
y el extra#include
.fuente
Gracias @ abo-abo por tu ayuda. He seguido su sugerencia correcta e incluso la he mejorado un poco para editar solo mi archivo de organización (y para crear automáticamente el archivo de entrada externo). La idea es crear un bloque de código externo (aquí un script bash llamado build_input_file) que crea el archivo de datos y llamarlo automáticamente antes de evaluar el otro bloque gracias a
:var tmp=build_input_file
.fuente