使用C ++是否可以使用Cin语句为用户提供默认值,然后让他们退回他们想要更改的内容?例如:我给用户一个更改字符串名称的选项,我将名称输出到屏幕:“John Doe”,他们可以退格以将名称更改为“John Smith”。
答案 0 :(得分:3)
对于此类功能以及更多功能,请查看GNU Readline或其中一项工作。它基本上是一个应用程序库,用于支持命令行编辑,使用熟悉的功能,如向上箭头重复以前的命令,编辑那些以前的命令,是的,您可以自定义呈现给用户的文本,然后用户可以使用相同的方式对其进行编辑可以在shell中使用的击键。
答案 1 :(得分:0)
我可能会疯狂,但这里是一个适用于Visual Studio 2012 Update 1的普通Windows解决方案。它模拟您想要输入的字符,这些字符应该保留在输入缓冲区中,直到它们准备好读取,然后读取输入,等待换行。
#include <iostream>
#include <string>
#include <windows.h>
void InsertDefaultName(const std::string &def) {
HWND hwnd = GetConsoleWindow();
for (char c : def) {
SendMessage(hwnd, WM_CHAR, c, 0);
}
}
int main() {
std::cout << "Enter name: ";
std::string name;
InsertDefaultName("John Doe");
std::getline(std::cin, name);
std::cout << "You entered " << name << '\n';
}
值得注意的是,如果用户在进入InsertDefaultName()
函数调用之前按住某个键,则可能无法完全正常工作。一个更强大的库肯定会更好,但是如果它没有一个全新的库就可以正常运行,那就在这里。