c++ - 提供 cin 输入的默认值

标签 c++ cin

我的应用程序使用 std::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";

关于c++ - 提供 cin 输入的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736176/

相关文章:

c++ - 是否可以从输入流中读取 'throw away' 值?

c++ - 出界字符数组的错误检查 - 使用 std::cin

c++ - 改变数组的值

c++ - QProgressBar 使应用程序消耗大量内存

c++ - 为什么 const_casting a heap.top() of priority_queue 有未定义的行为?

c++ - Vector 下标添加元素失败

c++,如何验证数据输入是否具有正确的数据类型

c++ - 常量字符数组的获取字符串长度函数(strlen)不是常量表达式

c++ - 如何在不可靠的集群上分发程序?

c++ - 当从类方法调用 namespace 中同名的函数时,重载解析失败