[分享] 標準輸入流讀取不用按enter也不會等待輸入

看板C_and_CPP作者 (艾伯特)時間13年前 (2011/02/18 17:31), 編輯推噓2(2014)
留言16則, 6人參與, 最新討論串1/1
這個程式如果 你按A他會一直出現A 你按B他會一直出現B 隨便按停止 它不會等待輸入也不用按enter 程式碼 --------------------------------------------------------------------- #include <stdio.h> #include <windows.h> #include <string.h> int main(){ HANDLE handle = GetStdHandle(STD_INPUT_HANDLE); DWORD events; int key=0; INPUT_RECORD buffer; PeekConsoleInput( handle, &buffer, 1, &events ); while(1){ PeekConsoleInput(handle, &buffer, 1, &events); if(events > 0) { ReadConsoleInput(handle, &buffer, 1, &events); if (buffer.Event.KeyEvent.wVirtualKeyCode=='A'){ key=1; } else if (buffer.Event.KeyEvent.wVirtualKeyCode=='B'){ key=2; } else{ key=3; } } if (key==1){ printf("A"); } else if (key==2){ printf("B"); } else if (key==0){ } else { return 0; } } } ------------------------------------------------------ 參考資料: http://stackoverflow.com/questions/421860/ c-c-capture-characters-from- standard-input-without-waiting-for-enter-to-be-pre -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.135.96.181

02/18 18:47, , 1F
這種通常都要用到系統函式吧 如果是ANSI C做的到嗎?
02/18 18:47, 1F

02/18 18:57, , 2F
不好意思我很注重小細節, 用魔數就是不喜歡
02/18 18:57, 2F

02/18 19:43, , 3F
ANSI C 不管 console 實作的吧
02/18 19:43, 3F

02/18 20:05, , 4F
你們說甚麼可以解釋一下嗎?我不太懂你們說甚麼拜託
02/18 20:05, 4F

02/18 20:06, , 5F
是我這樣寫不好嗎?
02/18 20:06, 5F

02/18 20:07, , 6F
還是哪裡有可以改進的地方~感覺這個很有趣哈哈
02/18 20:07, 6F

02/18 20:25, , 7F
真要說什麼可以挑的話, 其實 conio.h 的 getch 就好
02/18 20:25, 7F

02/18 20:33, , 8F
完全看不懂XD
02/18 20:33, 8F

02/18 20:52, , 9F
我之後還要做到Matlab裡面不知道行不行得通
02/18 20:52, 9F

02/18 20:53, , 10F
我現在是想說PO上來看看會不會有人給些意見哈哈~"~
02/18 20:53, 10F

02/18 20:57, , 11F
他們好像是說我沒用標準函式庫去寫的樣子哈哈~"~
02/18 20:57, 11F

02/19 16:27, , 12F
我想前幾樓的某幾樓的翻譯是: 你這程式portability很差.
02/19 16:27, 12F

02/19 16:28, , 13F
反正能用就好 能解決大部分人的問題就好
02/19 16:28, 13F

02/19 16:28, , 14F
所以給你個推!
02/19 16:28, 14F

02/20 01:37, , 15F
conio.h的可攜性似乎更低 好像只有dev C++會過
02/20 01:37, 15F

02/20 01:37, , 16F
如果要在POSIX跑 要怎麼弄會比較好?
02/20 01:37, 16F
文章代碼(AID): #1DNZnqw9 (C_and_CPP)