Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50516
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 251
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-15 09:28
文章分类
文章存档

2017年(25)

分类: LINUX

2017-09-05 19:34:34

   
  在执行程序的时候,我们经常会需要从键盘输入数据,但是难免会输入有误需要使用退格键删除,但默认情况下退格键也会被回显到屏幕上,无法实现我们想要的删除功能。解决办法如下 :

方法一 : 
在程序中添加 system("stty erase ^H");  语句, 可以使得退格键不显示

方法二 :
#include
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;
}
阅读(716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~