Chciałbym oceniać bloki kodu źródłowego w trybie org w C ++ zawierające instrukcje „cin”, ale nie mogę znaleźć sposobu na interaktywną ocenę (z wkładem użytkownika) podczas oceny. Przykład kodu:
#+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
Czy możliwe jest przeprowadzenie takiej interaktywnej oceny lub symulacji (poprzez podanie kodu źródłowego fałszywych danych wejściowych)?
:var varname=value
w nagłówku. W drugim przypadku możesz nadal używać:var
, ale zamiast wartości użyj innego bloku kodu z funkcją ELisp, która prosi o podanie danych.Odpowiedzi:
Lubię to:
Utwórz plik
in.txt
w tym samym katalogu co plik organizacji z zawartością10
.źródło
Zamiast tego możesz poprosić Emacsa o interaktywne wprowadzanie danych za pomocą nazwanego
elisp
bloku. Następnie przekaż zebraną wartość do bloku souce C ++, używając:var c-variable=block-name
składni:Zauważ, że wyjścia bloków źródłowych są przekazywane jako ciągi, więc musimy przekonwertować je na liczbę całkowitą, stąd
atoi
i dodatkowe#include
.źródło
Dzięki @ abo-abo za pomoc. Postępowałem zgodnie z twoją sugestią, która jest właściwa, a nawet trochę ją ulepszyłem, aby edytować tylko mój plik org (i automatycznie tworzyć zewnętrzny plik wejściowy). Pomysł polega na utworzeniu zewnętrznego bloku kodu (tutaj skrypt bash o nazwie build_input_file), który tworzy plik danych i wywołuje go automatycznie przed oceną drugiego bloku dzięki
:var tmp=build_input_file
.źródło