0

使用 C++ 是否可以使用 Cin 语句为用户提供默认值,然后让他们退格他们想要更改的内容?例如:我给用户一个更改字符串名称的选项,我将名称输出到屏幕:“John Doe”,他们可以退格将名称更改为“John Smith”。

4

2 回答 2

3

对于这样的功能以及更多功能,请查看GNU Readline或其类似产品之一。它基本上是一个应用程序库,支持使用熟悉的功能进行命令行编辑,例如向上箭头重复以前的命令,编辑以前的命令,是的,您可以自定义呈现给用户的文本,然后用户可以使用相同的方式对其进行编辑在外壳中使用的击键。

于 2013-04-14T02:49:00.527 回答
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()调用函数之前按住某个键,这可能无法完全正常工作。一个更健壮的库肯定会更好,但如果它在没有全新库的情况下对你来说足够好的话,那就是这里。

于 2013-04-14T02:57:34.047 回答