16、linux 程序输入时退格键的问题


     在程序中经常要与用户进行交互,最简单的就是从命令行获取输入,通常使用 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;
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值