2016-09-28 16 views
1

私のアプリはstd::cinストリームを使ってユーザ入力を読み込みます。 私はデフォルトの入力を提供したいと思います。ユーザーはそれをそのまま受け入れるか(Enterを押す)、続行する前に変更してください(古い文字をバックスペースで削除して新しいテキストを追加する)。cin入力のデフォルト値を指定する

文字をcin.rdbufに直接入れることができますが、これは達成したいことではありません。 ユーザーの入力を待っているときにコンソールのカーソルがある場所にコンソールウィンドウに文字を置いて、ユーザーがそれを受け入れる前にそれらを読まないようにしたいと思います。ユーザーはそれらを削除して、自分のテキストを書くこともできるはずです。

cinを使用して達成できるか、コンソールのコンテンツを1文字読み直してシミュレートする必要がありますか?

+0

あなたが何かをしたい場合:

これが行われている伝統的な方法は、単にプロンプ​​ト自体にデフォルトの入力値を示し、そして、何かのように空の入力の際にデフォルト値を使用することですncurses(http://hughm.cs.ukzn.ac.za/~murrellh/os/notes/ncurses.html)を参照するのではなく、事前に塗りつぶしたスクリーンマスクのようなものです。 –

+0

これを行うには、コンソールライブラリが必要です(例:[Microsoft's](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx? f = 255&MSPPError = -2147217396)または[libreadline](https://cnswww.cns.cwru.edu/php/chet/readline/rltop.html)または[ncurses](https://en.wikipedia。 org/wiki/Ncurses) – kfsone

答えて

4

いいえ、そのようなものはstd::cinで行うことはできません。その読み込みバッファは標準入力から直接読み込まれます。標準入力は「調理済み」の文字ストリームです。すべての編集はオペレーティングシステムのターミナルコンソールですべて処理され、Enterを押すと、アプリケーションのstd::cinは入力されたテキストを読み込みます。

std::string buffer; 

std::cout << "What color is the sky [blue]? "; 

std::getline(std::cin, buffer); 

if (buffer.size() == 0) 
     buffer="blue"; 
+0

ありがとうございます。しかし、あなたの例は私の場合はうまくいきません。なぜなら、私の目標は、テキストを少しだけ変更したいときに、テキスト全体を書くという強制を防ぐことだからです。例:[デフォルト]:_someReallyLongName1_ [ユーザ入力]:_someReallyLongName2_ – leggo

関連する問題