2009-07-09 9 views
3

Ist es möglich (ohne externe Bibliothek wie boost), um Eingabe vom Benutzer, wie die Verwendung von Cin, aber mit einer Standardauswahl, die vom Benutzer (ohne GUI) bearbeitet werden kann, zu fragen?Aufforderung mit bearbeitbaren Standard in C++?

Zum Beispiel wird das Programm sagen:

Give your input: default 

und der Benutzer kann Enter drücken "default" oder 1 drücken zu verwenden, geben Sie dann, um "Voreinstellung1" usw.

EDIT zur Klärung :

Was ich aktuell in meinem Programm habe, ist die Vorgabe in der Eingabeaufforderung (wie in einer der Antworten unten). Aber ich schreibe für sehr spezielle Fälle, in denen eine editierbare Voreinstellung extrem zeitsparend ist (und in 90% der Fälle braucht der Benutzer ein Suffix zum Standard hinzuzufügen). Ich kann nur nach dem Suffix fragen, aber dann habe ich die Flexibilität verloren, den Standard in den anderen 10% der Fälle zu bearbeiten.

Antwort

4

Sie können GNU readline verwenden.

+2

Insbesondere möchten Sie 'rl_insert_text()'. Readline hat einige Probleme auf OSX (http://stackoverflow.com/questions/967029/using-readlines-rlinserttext-on-osx-10-5), aber Sie können stattdessen die ähnliche 'editline' Bibliothek verwenden (http: // devworld.apple.com/dOcUmEnTaTiOn/Darwin/Reference/ManPages/man3/editline.3.html), für die Sie 'el_insertstr()' verwenden möchten. – rampion

+0

Es ist ein guter Vorschlag, aber ich habe keine externen Abhängigkeiten ... – polyglot

0

Nicht leicht ohne eine externe Bibliothek. Alle Terminals handhaben das anders - es sei denn, Sie möchten eine Los Code schreiben, benötigen Sie eine Bibliothek. Ich schlage vor, Sie schauen in Ncurses.

+0

Flüche wäre massive Overkill für diesen Anwendungsfall – Novelocrat

3

Dies geschieht normalerweise etwas anders als Sie beschrieben haben. Es ist ziemlich häufig (zumindest wie ich gesehen habe), die Standardoption als Teil der Eingabeaufforderung anstatt danach anzuzeigen. Zum Beispiel:

Please enter a year (default: 2009):

oder

Do you really want to exit (N):

Dies hat den zusätzlichen Vorteil, dass, wenn der Benutzer ihren/seinen eigenen Wert will eher eingeben als den Standard, er/sie muss nicht einen vorhandenen Wert zu löschen, um dies zu tun, was eine schlechte Benutzerfreundlichkeit und eher frustrierend ist, insbesondere wenn es sich um eine lange Reihe von Fragen/Aufforderungen handelt.

Es erfordert auch keine speziellen Bibliotheken und deutlich weniger zusätzlichen Code.

+1

Manchmal ist ein editierbarer Standard nützlich - wie Commit-Nachrichten oder in Git oder Svn, oder immer wenn Sie einen unvollständigen Standard für den Benutzer darstellen möchten. – rampion

+1

Das habe ich jetzt; aber ich schreibe für ganz spezielle Fälle, dass das Bearbeiten eines Standardwertes extrem zeitsparend ist (und in 90% aller Fälle braucht der Benutzer ein Suffix zum Standard hinzuzufügen). Ich kann nur nach dem Suffix fragen, aber dann habe ich die Flexibilität verloren, den Standard in den 10% der Fälle zu bearbeiten. – polyglot

+0

Verständlich. –