Ich möchte im org-Modus Quellcodeblöcke in C ++ auswerten, die "cin" -Anweisungen enthalten, aber ich kann keine Möglichkeit finden, während der Auswertung eine interaktive Auswertung (mit Benutzereingaben) durchzuführen. Beispiel für 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
Ist es möglich, eine solche interaktive Auswertung durchzuführen oder zu simulieren (indem dem Quellcode eine gefälschte Eingabe gegeben wird)?
:var varname=value
in der Kopfzeile verwenden. Im zweiten Fall könnten Sie noch einen:var
anderen Codeblock mit einer ELisp-Funktion verwenden, der zur Eingabe auffordert.Antworten:
So was:
Erstellen Sie eine Datei
in.txt
im selben Verzeichnis wie die Org-Datei mit Inhalt10
.quelle
Sie können Emacs bitten, die interaktive Eingabe stattdessen mithilfe eines benannten
elisp
Blocks abzurufen. Übergeben Sie dann den gesammelten Wert mithilfe der folgenden:var c-variable=block-name
Syntax an den C ++ - Quellblock :Beachten Sie, dass die Ausgaben von Quellblöcken als Zeichenfolgen übergeben werden, sodass wir sie in eine Ganzzahl konvertieren müssen, daher das
atoi
und das Extra#include
.quelle
Danke @ abo-abo für deine Hilfe. Ich bin Ihrem Vorschlag gefolgt, der richtig ist, und habe ihn sogar ein wenig erweitert, um nur meine Organisationsdatei zu bearbeiten (und die externe Eingabedatei automatisch zu erstellen). Die Idee ist, einen externen Codeblock (hier ein Bash-Skript mit dem Namen build_input_file) zu erstellen, der die Datendatei erstellt und sie automatisch aufruft, bevor der andere Block dank der
:var tmp=build_input_file
.quelle