当我尝试在 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 中提供用户输入时,光标仍保留在最后的主要内容,如果未能解决你的问题,请参考以下文章