使用 getch() 函數,需要先引入 conio.h 頭文件 然而,我使用的是 cygwin 作為編譯環境,找不到 conio.h ,所以只能想辦法找替代方法,或者自己構造一個具有類似功能的函數。 可惜,剛學編程沒多久,一時之間也是沒有想到什麼合適的替代方法,若說自己構造這個函數,這就更難了。 於 ...
使用 getch() 函數,需要先引入 conio.h 頭文件
然而,我使用的是 cygwin 作為編譯環境,找不到 conio.h ,所以只能想辦法找替代方法,或者自己構造一個具有類似功能的函數。
可惜,剛學編程沒多久,一時之間也是沒有想到什麼合適的替代方法,若說自己構造這個函數,這就更難了。
於是百度,終於找到了取巧的方式。
原理為:臨時關閉終端的緩存,然後使用 getchar() ,這樣就能直接獲取按鍵,而不用等到按下回車鍵才生效。
測試代碼如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int my_getch(void); 5 6 int main(void){ 7 8 while('q' != my_getch()){ 9 printf("hello\n"); 10 } 11 12 return 0; 13 } 14 15 16 17 int my_getch(void){ 18 char a; 19 system("stty -icanon"); //關閉終端緩衝區 20 system("stty -echo"); //關閉終端回顯 21 a = getchar(); 22 system("stty icanon"); //打開終端緩衝區 23 system("stty echo"); //打開終端回顯 24 return a; 25 }
同樣的原理,可以取巧實現 getche() 函數的功能,這裡就不在贅述了。