我的应用使用std::cin
流读取用户输入。 在一个地方,我想提供默认输入,并让用户按照原样接受它(通过按回车键)或在继续之前修改它(通过移除旧字符并添加新文本)。提供cin输入的默认值
我知道字符可以直接放入cin.rdbuf
,但那不是我想要达到的。 我想在控制台光标所在的位置放置字符到控制台窗口中,等待用户输入时,在用户接受它们之前不要读取它们。用户应该也可以删除它们并编写自己的文本。
可以这样做使用cin
或我必须通过阅读单个字符和重新绘制控制台的内容来模拟此?
我的应用使用std::cin
流读取用户输入。 在一个地方,我想提供默认输入,并让用户按照原样接受它(通过按回车键)或在继续之前修改它(通过移除旧字符并添加新文本)。提供cin输入的默认值
我知道字符可以直接放入cin.rdbuf
,但那不是我想要达到的。 我想在控制台光标所在的位置放置字符到控制台窗口中,等待用户输入时,在用户接受它们之前不要读取它们。用户应该也可以删除它们并编写自己的文本。
可以这样做使用cin
或我必须通过阅读单个字符和重新绘制控制台的内容来模拟此?
不,这样的事情不能用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";
感谢您的解释。然而,你的例子不适用于我的情况,因为我的目标是防止用户强制写入整个文本,当他们只想修改它时。例如:[默认]:_someReallyLongName1_ [用户输入]:_someReallyLongName2_ – leggo
如果你想拥有的东西像预填充的屏幕蒙版,而不是查找[ncurses](http://hughm.cs.ukzn.ac.za/~murrellh/os/notes/ncurses.html)。 –
您需要某种控制台库来执行此操作,例如[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