Я хочу сделать интерактивное консольное приложение, которое позволяет вводить команду в цикле. Например, пользовательские типы «поиск» и программа находят некоторые данные и распечатывают их на экране. Затем программа ждет следующей команды (которая может быть поиском, выходом или другим). Для удобства пользователя я хочу, чтобы моя программа поддерживала историю команд (например, в терминале, при нажатии стрелки вверх и вниз на клавиатуре). Но я не могу понять, как это сделать, потому что я не знаю, как печатать текст, который можно прочитать дальше scanf, std :: getline, std :: cin и т. Д. Код std::cin << "hello";
не компилирован (не соответствует «operator» < < 'in' std :: cin < < «привет» '). Функция fprintf(stdin, "hello");
ничего не печатает, и scanf не может прочитать это печатное сообщение. Очевидно, что std::getline(std::cin, str);
и scanf("%s", s);
и gets(s)
и т. Д. Не могут читать текст, который был выдан printf
или std::out
. Поэтому возникает вопрос: как я могу печатать текст на консоли, который также будет в stdin
(std::cin
)? Или, может быть, есть более элегантный способ организовать историю команд?Как создать историю команд в консольном приложении?
P.S. Я также подумал об имитации нажатия кнопки, чтобы напечатать текст, который мне нужен, но я надеюсь, что есть лучший способ сделать историю команд.
P.P.S. Я использую Linux и C++
Это помогает, когда вы помните, что стандартный ввод-вывод начался в системе без экрана, но с принтером. 'printf' буквально напечатанный текст. Чтобы прочитать это с помощью 'scanf', потребовалось бы, чтобы оператор-человек подавал фактический вывод бумаги на сканер. – MSalters