input — чтение уже введенной строки из переполнения стека консоли

Я знаю, что это странный вопрос, но есть ли способ прочитать предыдущий ввод с консоли. Что-то вроде:

The fox is brown // line 1
The duck is yellow // line 2
Here where the control is right now_ // but I want to read line 2

П.С .: Я пользуюсь windows

0

Решение

Если, читая предыдущий ввод, вы имеете в виду, что из программы на C ++ ответ — да. Стандартный вход поток который поддерживает буфер чтения.

Быстро и грязно, чтобы размотать поток и прочитать одну и ту же строку дважды

#include <iostream>
#include <string>

using namespace std;

int main()
{
cout << "Enter a line of text and you will see it echo twice\n";

string mystring;
getline(cin, mystring);
cout << mystring;

cout << "\n";

// reverse the input stream by the lengtht of the read string (+1 for the newline)
for (int i = 0; i <= mystring.length(); i++)
{
cin.unget();
}

string mystring2;
getline(cin, mystring2);
cout << mystring2;

cout << '\n';
}
2

Другие решения

Это может быть сделано с некоторыми допущениями, но имеет некоторые ограничения, которые вы можете счесть слишком строгими. Так что лучше найти способ, как этого не делать.

С помощью Ncurses В библиотеке вы можете получить полный контроль над терминалом и читать / записывать символы в любую позицию на экране. Но если вы сделаете это, вы будете нести ответственность за управление им, включая прокрутку текста. Также невозможно прокрутить терминал вверх, если вы не внедрили его самостоятельно. Кроме того, вам нужно будет учитывать размер экрана и обрабатывать его изменения. Помните, что ваша программа также может быть запущена в терминале, который не поддерживает этот режим.

Так что не связывайтесь с ним, если можете, и сохраняйте пользовательский ввод внутри вашей программы вместо того, чтобы хранить его на экране.

1

Кажется, это довольно близко.

история | хвост -n 2

0