2016-05-04 6 views
4

Ich weiß, wir können Babel verwenden, um Code-Block im Org-Modus auszuwerten. Aber es scheint, dass Babel nicht mit "cin" umgehen kann. Gefällt Ihnen diesesIst es möglich, Babel im org-Modus zu verwenden, um den Code-Block zu evaluieren, an dem "cin" beteiligt ist?

int a;std::cin >> a;std::cout << a; 

Die Babel fragen Sie mich nicht zur Eingabe der Wert von a, und es Ausgang den Wert 0

Can Babel dieses Problem umgehen? Oder einige andere Tools können dies tun.

+0

Scheint nicht möglich; siehe http://stackoverflow.com/questions/12129038/how-to-pipe-input-to-a-src-block-as-stdin – pdexter

Antwort

3

Ich kann zwei verschiedene Ansätze dafür denken. Der erste Ansatz besteht darin, eine Datei wie input.data mit dem Inhalt von beispielsweise 4 im Home-Verzeichnis zu erstellen. Dies wird an std::cin geliefert. Dann schreiben Sie den Code wie folgt:

#+begin_src C++ :results output :includes <iostream> :cmdline < ~/input.data 
int a; 
std::cin >> a; 
std::cout << a; 
#+end_src 

#+RESULTS: 
: 4 

Der zweite Ansatz, die interessanter ist, ist ein wenig lisp Code für Interaktivität zu verwenden:

#+name: input 
#+begin_src elisp 
(completing-read "Enter a number: " nil) 
#+end_src 

#+begin_src C++ :results output :var input=input 
#include <iostream> 
#include <string> 

int main() { 
    int a = std::atoi(input); 
    std::cout << a; 
} 
#+end_src 

#+RESULTS: 
: 3 

Bei diesem Ansatz werden Sie In Emacs aufgefordert, eine Nummer einzugeben, die im C++ Code verwendet wird.

+0

Danke! Das ist die Antwort. Und ich denke "#include " wird benötigt. – ernest

+0

@ernest Gern geschehen! –