在程序中经常要与用户进行交互,最简单的就是从命令行获取输入,通常使用 cin 或者 scanf 来获取用户
输入信息。但用户有时候会输入错误,想使用退格键删除重新输入时,系统往往会将退格键也当做用户的输入,退格
键也会被回显到屏幕上,因此无法实现我们预期的退格删除功能。解决办法如下 :
方法一 :
在程序中添加如下代码 system("stty erase ^H"); /* 退格键不回显 */
方法二 :
#include <termios.h>
struct termios term;
if ( tcgetattr(STDIN_FILENO, &term;) == -1 )
{
cout << "tcgetattr error : " << strerror(errno) << endl;
return;
}
/*
* term.c_lflag &= ~ICANON;
* term.c_lflag |= ICANON;
* term.c_cc 字段为要设置的具体特殊输入字符,如c_cc[VERASE]代表退格键
* term.c_cc[VERASE] = '\b'; 将退格键设置为 '\b'
* VERASE代表向前擦除一个字符,VINTR代表发送ctrl+c中断信号, ctrl+c 的ASCII码为3
* 例如 :term.c_ccVINTR = '\t'; 将tab键设置为发送中断信号的功能, 取代了ctrl+c
* tcsetattr函数中,第二个参数 :TCSAFLUSH - 发送了所有输出后才生效,所有未读取的数据删除
* TCSANRAIN - 立即生效, TCSADRAIN - 发送了所有输出后更改生效
*/
term.c_cc[VERASE] = '\b'; /* 设置'\b' 为退格键的 ASCII 码*/
if ( tcsetattr(STDIN_FILENO, TCSANOW, &term) == -1 )
{
cout << "tcsetattr error : " << strerror(errno) << endl;
}