2016-09-30 2 views
0

Ich weiß, das ist eine seltsame Frage, aber gibt es eine Möglichkeit, eine vorherige Eingabe von der Konsole zu lesen. Etwas wie:Read Eine bereits eingegebene Zeile von der Konsole C++

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 

P. S: Ich verwende Windows

+0

eine Konsole Klasse Schreiben lesen, die von der Konsole liest und speichert die Linien für die zukünftige Verwendung. Es sollte eine einfache Schnittstelle zum Abrufen der aktuellen Zeile (Blockieren bei Eingabe) und zum Abrufen vorheriger Zeilen bereitstellen. – Peter

Antwort

0

Dies scheint es ziemlich nah dran ist.

geschichte | tail -n 2

+0

Ich verwende leider Codeblocks bei Windows, gibt es in meinem Fall eine Alternative? –

+1

Probieren Sie ... http://superuser.com/questions/290107/bash-history-like-feature-for-windows-command-prompt –

+0

'history' druckt Befehle in die Shell (bash zum Beispiel). Es werden keine Zeichenfolgen gedruckt, die der Benutzer in anderen Programmen eingegeben hat. –

1

Es kann mit einigen Annahmen gemacht werden, bringt aber einige Einschränkungen, die Sie möglicherweise zu streng finden. Also ist es besser, einen Weg zu finden, wie man das nicht macht.

Mit ncurses Bibliothek können Sie die volle Kontrolle über Terminal und Lesen/Schreiben Symbole an einer beliebigen Stelle auf dem Bildschirm. Aber wenn Sie das tun, werden Sie dafür verantwortlich sein, dies zu kontrollieren, einschließlich Scroll-Text. Es ist auch nicht möglich, das Terminal nach oben zu scrollen, wenn Sie es nicht selbst implementieren. Außerdem müssen Sie die Bildschirmgröße berücksichtigen und Änderungen vornehmen. Beachten Sie, dass Ihr Programm auch unter einem Terminal gestartet werden kann, das diesen Modus nicht unterstützt.

Also, nicht damit zu tun, wenn Sie können und Benutzereingaben in Ihrem Programm speichern, anstatt es auf dem Bildschirm zu speichern.

3

Wenn Sie mit dem Lesen der vorherigen Eingabe aus dem C++ - Programm meinen, lautet die Antwort ja. Die Standardeingabe ist eine stream, die einen Lesepuffer verwaltet.

Schnell und schmutzig, den Strom zu entspannen und die gleiche Zeile zweimal

#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'; 
} 
+0

Sie haben im Grunde die meisten meiner Antwort blatted, also hier ist eine Einschränkung: dieser Stream-Puffer geht nicht für immer zurück und Sie haben praktisch keine Kontrolle darüber, wann es aufräumen wird. Wenn Sie nachsehen, sind einige oder alle der Zeile 2 möglicherweise nicht mehr verfügbar. – user4581301

+0

Danke, aber könntest du kurz erklären, was das std :: cin.unget() genau macht –

+2

['entget' setzt das letzte Zeichen zurück in den Stream] (http://en.cppreference.com/w/cpp/io/basic_istream/Unget). Andere Anmerkung: Der Versuch, 'seekg' zu verwenden, um das gleiche zu tun, ist ... Nun, ich kann in [dem Standard-Arbeitsentwurf] nichts explizit finden (http://open-std.org/JTC1/SC22/WG21) /docs/papers/2016/n4606.pdf) das ist frei verfügbar, aber es sieht Implementierung definiert aus. Zählen Sie nicht auf 'seekg' arbeiten. – user4581301

Verwandte Themen