Saya ingin mengevaluasi dalam blok kode sumber mode org dalam C ++ yang berisi instruksi "cin" tetapi saya tidak dapat menemukan cara untuk melakukan evaluasi interaktif (dengan input pengguna) selama evaluasi. Contoh kode:
#+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
Apakah mungkin untuk melakukan evaluasi interaktif atau mensimulasikan (dengan memberikan kode sumber input palsu)?
:var varname=value
di header. Dalam kasus kedua Anda masih bisa menggunakan:var
, tetapi sebagai pengganti nilai gunakan blok kode lain dengan fungsi ELisp yang meminta input.Jawaban:
Seperti ini:
Buat file
in.txt
di direktori yang sama dengan file Org, dengan konten10
.sumber
Anda dapat meminta Emacs untuk mendapatkan input interaktif alih-alih menggunakan
elisp
blok bernama . Kemudian meneruskan nilai yang dikumpulkan ke blok sumber C ++ menggunakan:var c-variable=block-name
sintaksis:Perhatikan bahwa output dari blok sumber dilewatkan sebagai string, jadi kita harus mengubahnya menjadi bilangan bulat, karenanya
atoi
dan ekstra#include
.sumber
Terima kasih @ abo-abo atas bantuan Anda. Saya telah mengikuti saran Anda yang benar dan bahkan sedikit ditingkatkan untuk mengedit hanya file org saya (dan untuk membuat secara otomatis file input eksternal). Idenya adalah untuk membuat blok kode eksternal (di sini skrip bash bernama build_input_file) yang membuat file data dan untuk memanggilnya secara otomatis sebelum mengevaluasi blok lain terima kasih kepada
:var tmp=build_input_file
.sumber