在程序使用system("stty erase ^H");可以实现在输入状态下,按退格键删除字符,不回显。 调用tcsetattr修改linux基本输入的控制字符定义
//Linux下退格键不回显 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <termios.h> int main(int arg,char *args[]) { /* * 第一种方法 * */ //system("stty erase ^H"); /* * 第二种方法 * */ struct termios term; memset(&term,0,sizeof(term)); /* * 获取系统当前termios设置 * */ if(tcgetattr(STDIN_FILENO,&term)==-1) { printf("tcgetattr() failed ! error message:%s\n",strerror(errno)); return -1; } /* term.c_lflag &= ~ICANON;//取消ICANON选项(不规范输入) term.c_lflag != ICANON;//设置ICANON选项(规范输入) term.c_cc字段为要设置的具体特殊输入字符,如term.c_cc[VERASE]代表退格键 term.c_cc[VERASE]='\b';意思是擦除一个字符用退格键表示 VERASE代表向前擦出一个字符,VINTR代表发送 ctrl + C中断信号,ctrl + C的ASCII码为3 例如term.c_cc[VINTR]='\t';意思是将tab键设置为中断信号 tcsetattr中,第二个参数说明-- TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取得所有输入数据都被删除 TCSANOW:更改立即生效 TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项 */ term.c_cc[VERASE]='\b';//'\b'为退格键的ASCII码 if(tcsetattr(STDIN_FILENO,TCSANOW,&term)==-1) { printf("tcsetattr() failed ! error message:%s\n",strerror(errno)); return -1; } return 0; }