Je voudrais évaluer en mode org des blocs de code source en C ++ contenant des instructions "cin" mais je ne trouve pas un moyen d'avoir une évaluation interactive (avec une entrée utilisateur) pendant l'évaluation. Exemple de code:
#+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
Est-il possible d'avoir une telle évaluation interactive ou de simuler (en donnant au code source une fausse entrée)?
:var varname=value
dans l'en-tête. Dans le second cas, vous pouvez toujours utiliser:var
, mais à la place de la valeur, utilisez un autre bloc de code avec une fonction ELisp qui demande une entrée.Réponses:
Comme ça:
Créez un fichier
in.txt
dans le même répertoire que le fichier Org, avec son contenu10
.la source
Vous pouvez demander à Emacs d'obtenir l'entrée interactive à la place en utilisant un
elisp
bloc nommé . Passez ensuite la valeur collectée au bloc souce C ++ en utilisant la:var c-variable=block-name
syntaxe:Notez que les sorties des blocs source sont transmises sous forme de chaînes, nous devons donc le convertir en un entier, d'où le
atoi
et le supplément#include
.la source
Merci @ abo-abo pour votre aide. J'ai suivi votre suggestion qui est juste et je l'ai même un peu améliorée pour modifier uniquement mon fichier org (et pour créer automatiquement le fichier d'entrée externe). L'idée est de créer un bloc de code externe (ici un script bash nommé build_input_file) qui crée le fichier de données et de l'appeler automatiquement avant d'évaluer l'autre bloc grâce au
:var tmp=build_input_file
.la source