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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章