getch()函式依賴於標頭檔案conio.h.會在windows平台下從控制台無回顯地取乙個字元,並且返回讀取到的字元。
然而,我在實際用這個函式才發現getch()這個函式並不簡單。
getch函式從控制台讀取單個字元而不回顯,函式不能去讀取ctrl+c,當讀取乙個功能鍵或方向鍵,函式必須呼叫兩次(這就說明可以用這個函式去監控功能鍵和方向鍵),第一次呼叫返回0或0xe0,第二次返回實際的鍵**例如:
#include #include int main()
return 0;
}
在這個簡單的小程式中,我測試了幾個鍵盤的按鍵。
為了**getch()的真相,我改寫了以上函式。
int main()
return 0;
}
在鍵盤上依次輸入上下左右得到如下鍵值:
上下左右方向鍵,getch()第一次返回 224(0xe0),第二次返回真實鍵值
在鍵盤上依次輸入f1~f10、f11、f12、delete得到如下鍵值:
f1~f10,getch()第一次返回 0 ,第二次返回該鍵的真實鍵值(59~68)
那麼問題就來了,getch()一會返回乙個值,一會返回兩個值,究竟要怎樣寫才不會出錯呢?
我這裡提供一種方法,僅供參考
#include int main()
} else //普通按鍵,如字母、數字、space,esc等按鍵}}
return 0;
}
注意1:在以上**中 tmp 為char型別,可接受的值為 -128~127之間,所以原本 0xe0的返回值(10進製為224) 會被轉換為 -32。
轉換原理為 超出char範圍的(即127以後的數字),把差值從 char型別的另一側極限值重新開始計算(即-128往後排)
例如:224——> 超出97(224-127)——> -128+97-1=-32
詳見char的越界賦值即其原理剖析
解決辦法:
可以把tmp定義 unsigned char型別
通過計算、或者測試,得到可用的鍵值。
注意2:用getch()函式時,編譯器可能會給出如下錯誤
嚴重性 ** 說明 專案 檔案 行 禁止顯示狀態解決辦法:把getch()換成編譯器要求的_getch()函式即可錯誤 c4996 'getch': the posix name for this item is deprecated. instead, use the iso c and c++ conformant name: _getch. see online help for details.
getch方法 如何實現getch 函式的功能
使用 getch 函式,需要先引入 conio.h 標頭檔案 然而,我使用的是 cygwin 作為編譯環境,找不到 conio.h 所以只能想辦法找替代方法,或者自己構造乙個具有類似功能的函式。可惜,剛學沒多久,一時之間也是沒有想到什麼合適的替代方法,若說自己構造這個函式,這就更難了。原理為 臨時關...
NSDictionary的使用方法及其小例子
nsarray array1 nsarray arraywithobjects iphone ipod nil nsarray array2 nsarray arraywithobjects mac imac mac pro nil 類方法初始化自動釋放 nsdictionary mydiction...
vue的元件及其使用方法
vue作為一款優秀的前端開發框架,在元件方面確實比純粹的html要方便得多。以往在敲前端 的時候,我們不可避免的要在不同的頁面使用同樣的 比如導航欄 側邊欄等。雖然可以在乙個頁面中內建另外的頁面,但是這樣的操作也是相當麻煩,而我經常為了偷懶便直接貼上複製了,而這卻導致了頁面 非常冗長且冗餘嚴重,修改...