C++:标准输出中没有显示退格字符?
C++: Backspace characters not showing in stdout?
我正在实施具有命令历史记录的 shell。当用户按下向上或向下箭头时,当前行中的文本将替换为上一个或下一个命令。
我计划实施的算法相当简单。如果当前命令有k个字符,我输出k个'\b'字符来删除当前行的k个字符,然后将选择的命令输出到该行。
但是,我试图从一些基本的东西开始,例如查看输出 '\b' 字符是否甚至可以删除当前 stdout
行中的字符:
#include <iostream>
#include <queue>
#include <deque>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
cout << "asdf";
cout << "\b\b" << endl;
return 0;
}
上面这段代码的输出是:
asdf
当我期望时:
as
重要:我想在输出到stdout
.
后删除字符
我推荐使用 ncurses 和 readline 库。
示例:
sudo apt-get install libncurses5-dev libncursesw5-dev libreadline-dev
git clone https://github.com/ulfalizer/readline-and-ncurses
cd readline-and-ncurses
make
rlncurses
我的环境:
lsb_release -d ; uname -r ; g++ --version | head -1
Description: Ubuntu 20.04.3 LTS
4.4.0-19041-Microsoft
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
您需要 ANSI 转义码。尝试:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
cout << "asdf";
cout<<"\b\b\b\b3[J";
return 0;
}
3
代表 ESC
,[J
是代码的参数。 ESC[J
清除从光标到屏幕末尾的屏幕。更多信息:https://en.wikipedia.org/wiki/ANSI_escape_code#Fe_Escape_sequences
作为@n。 1.8e9-where's-my-share m.提到,对于大多数实现,\b
只是将光标向后移动 space,并且不会重写任何内容。
我正在实施具有命令历史记录的 shell。当用户按下向上或向下箭头时,当前行中的文本将替换为上一个或下一个命令。
我计划实施的算法相当简单。如果当前命令有k个字符,我输出k个'\b'字符来删除当前行的k个字符,然后将选择的命令输出到该行。
但是,我试图从一些基本的东西开始,例如查看输出 '\b' 字符是否甚至可以删除当前 stdout
行中的字符:
#include <iostream>
#include <queue>
#include <deque>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
cout << "asdf";
cout << "\b\b" << endl;
return 0;
}
上面这段代码的输出是:
asdf
当我期望时:
as
重要:我想在输出到stdout
.
我推荐使用 ncurses 和 readline 库。
示例:
sudo apt-get install libncurses5-dev libncursesw5-dev libreadline-dev
git clone https://github.com/ulfalizer/readline-and-ncurses
cd readline-and-ncurses
make
rlncurses
我的环境:
lsb_release -d ; uname -r ; g++ --version | head -1
Description: Ubuntu 20.04.3 LTS
4.4.0-19041-Microsoft
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
您需要 ANSI 转义码。尝试:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
cout << "asdf";
cout<<"\b\b\b\b3[J";
return 0;
}
3
代表 ESC
,[J
是代码的参数。 ESC[J
清除从光标到屏幕末尾的屏幕。更多信息:https://en.wikipedia.org/wiki/ANSI_escape_code#Fe_Escape_sequences
作为@n。 1.8e9-where's-my-share m.提到,对于大多数实现,\b
只是将光标向后移动 space,并且不会重写任何内容。