当我尝试在 getline 中提供用户输入时,光标仍保留在最后

Posted

技术标签:

【中文标题】当我尝试在 getline 中提供用户输入时,光标仍保留在最后【英文标题】:Cursor remains at the end when I try to give user input in getline 【发布时间】:2020-07-27 04:18:46 【问题描述】:

以下是询问姓名然后返回包含您姓名的语句的代码。

#include <iostream>
#include <string>

int main()
    std::string name;

    std::cout << "What is your name:\n";
    std::getline(std::cin, name);

    std::cout << "Your name is " << name << ".\n";

    return 0;

当我运行这个程序并输入名称时,有时您输入的方式错误,因此您使用箭头键向左或向右移动。但是,当我使用向左箭头键时,将打印^[[D 而不是向左移动光标。当我使用右箭头键时,会打印^[[C

我的问题是如何避免这种情况并实际将光标向右或向左移动。我在 Linux 上使用 Vim 文本编辑器。

【问题讨论】:

你的环境是什么? 如果你的意思是IDE,我不使用IDE。我只是在 Linux 中使用 vim 并使用 g++ 编译程序。我在终端中运行程序。 我问的是你的环境,因为你的程序会让你的终端处理左/右箭头。如果您收到这样的符号,则说明您的终端有问题。 你要求做的事情只有通过编写一个迷你编辑器才能实现。可能有帮助的是使用退格键并覆盖错误的部分。 【参考方案1】:

处理这类事情的常用方法是使用 editline 或 GNU readline linrary(这是一个 C 库):

#include <stdio.h>
#include <editline/readline.h>
#include <editline/history.h>

int main() 
    const char *name = readline("What is your name:");
    printf("Your name is %s.\n", name);
    return 0;

您需要安装 libray,并使用 -leditline 链接您的程序,

【讨论】:

感谢您的回答。我还想知道std::string 是否有办法做到这一点?由于目前我必须将 char 数组转换为字符串。我想使用字符串。

以上是关于当我尝试在 getline 中提供用户输入时,光标仍保留在最后的主要内容,如果未能解决你的问题,请参考以下文章

如何强制getline()一次输入一行[重复]

c ++ getline()在多次调用时不等待来自控制台的输入

C ++试图通过getline函数为函数调用获取用户输入值

面向菜单的C ++程序很难实现

如何在 QT Designer 中指定默认文本光标小部件

getline 出错(我相信),在获取管道程序的输入时抛出 std::logic_error