在程序中經常要與用戶進行交互,最簡單的就是從命令行獲取輸入,通常使用 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;
}