2016-09-28 137 views
1

我的应用使用std::cin流读取用户输入。 在一个地方,我想提供默认输入,并让用户按照原样接受它(通过按回车键)或在继续之前修改它(通过移除旧字符并添加新文本)。提供cin输入的默认值

我知道字符可以直接放入cin.rdbuf,但那不是我想要达到的。 我想在控制台光标所在的位置放置字符到控制台窗口中,等待用户输入时,在用户接受它们之前不要读取它们。用户应该也可以删除它们并编写自己的文本。

可以这样做使用cin或我必须通过阅读单个字符和重新绘制控制台的内容来模拟此?

+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