首頁  >  問答  >  主體

c++ - 控制台程序如何实现tab键自动补全?

我在实现一个类似cmd的程序,程序内置一些命令,通过tab键自动补全命令.
但是控制台没有自己的窗口过程函数,无法处理按键消息,setwindowshook也对控制台程序无效.
虽然普通的getchar可以判断是否是tab,但是命令是以行为单位的,还有backspace退格等问题,所以请教大家有没有好的方法

PHPzPHPz2765 天前810

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-17 13:17:55

    GNU Readline 函式庫 - 使用 GNU Readline 程式設計

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:17:55

    以前想過這個問題:
    用getchar可以。 ch=getchar(),每次輸入就判斷下ch的值。
    如果backspace轉義字元'b',直接輸出就可以覆蓋了。
    如果是TAB鍵的補全T,實作將你要補全的存在數組裡,然後去匹配。具體形式有
    1、在當前遊標的下一行輸出一個可匹配的字符,設定要匹配就輸入Enter鍵之類的,否則就不管他,這裡需要獲取並保存當前遊標位置,然後跳到下一行,顯示完提示字串後也要刪除。 blabla。 。
    2、按TAB鍵直接輸出符合的字串,要儲存原來的點,如果使用者按'esc'就傳回原來的字串,記錄符合數目,輸出'b'就可以。如果繼續按TAB則輸出目前,輸出匹配的下一個。

    有幾個函數提供參考:
    getch() // conio.h
    輸入的字元不會顯示在螢幕上,類似linux輸入密碼的。
    ssprintf()
    修改字元
    取得控制台遊標位置等等。 。 。 。

    我以前收藏的文章,"如何先cmd輸入密碼顯示*號碼 "
    http://www.cnblogs.com/jiangkun86/archive/2011/09/19/2181910.html

    回覆
    0
  • 取消回覆