如何在不更改已显示内容的情况下在控制台中输入?[C++]

How can I input in console without changing what's already shown? [C++]

提问人:Loukas 提问时间:3/15/2023 最后编辑:genpfaultLoukas 更新时间:3/15/2023 访问量:56

问:

我想在控制台中输入一些东西([PLAYER NAME]):

|=========[ Player Creation ]=========|
|Player name: [PLAYER NAME]           |
|=====================================|

但您可能知道,存在一些问题:

  1. 在我输入名称之前,第三行不会显示。
  2. 在我输入玩家姓名之前,第二行中的最后一条垂直线不会显示。输入名称后,它将放错位置。

我怎么能输入玩家的名字,同时显示整个菜单。

void playerMenu(std::string playerName) {
std::cout <<
    "|=========[ Player Creation ]=========|\n"
    "|Player name:";
std::cin >> playerName;
std::cout <<
    "|\n"
    "|=====================================|";
}
C++ 输入 控制台 IOSTREAM

评论

3赞 Botje 3/15/2023
这超出了所能提供的范围。您需要使用文本 UI 库,例如 ncurses 或 tickit。cout
0赞 drescherjm 3/15/2023
这将取决于您的控制台。如果您使用的是 MSWindows(您没有提到,因此我们不能假设),则可能需要使用像 ncurses 这样的库或操作系统 API 来执行此操作。
0赞 Andreas Wenzel 3/15/2023
普通 C++ 不允许您在屏幕上跳动光标。但是,大多数平台都提供允许您执行此操作的扩展。因此,为了回答您的问题,请指定您的问题适用于哪个平台(即操作系统)。
1赞 molbdnilo 3/15/2023
标准 I/O 模型几乎基于过去使用的电传打字机/电传打印机。(我认为“你和电脑可以轮流写的打字机”是一个合理的描述。如果你想要比“模拟纸”更高级的东西,你需要使用某种库。
1赞 Eljay 3/15/2023
假设您使用的是 Amiga 操作系统,则可以使用 ANSI 序列。

答: 暂无答案