为什么将“ESCAPE”改为“SHIFT”之后,程序又恢复正常了?

使用do while语句。
while(GetKeyState(VK_ESCAPE)>0);
判断是否按下“ESCAPE”,如果按下则跳出循环,否则继续循环。
第一次编译通过,程序无任何异常,可以正常使用。
可是转天再进行编译,不进行任何修改,出现问题,循环只执行一次。while语句基本失效,程序不进行判断,直接执行一次后结束。
可是,将“ESCAPE”改为“SHIFT”之后,程序又恢复正常了。
很诧异,为什么程序放了一天就出了问题,还是说,当前"ESCAPE"一直处于按下的状态。
使用vs2010编译。

www说
浏览 160回答 2
2回答

繁华开满天机

GetKeyState() 是会出现这样的问题。按理,需要调2次,用它的状态来判断键按下了,键又抬起了,这才完成了1次按键全过程。程序如下:#include <windows.h>#include <iostream>using namespace std;#include <stdio.h>#pragma comment (lib, "User32.lib")main(){int flag=0,v;do{ if (flag==0)while(1){ v=GetKeyState(VK_ESCAPE);if (v >0) {printf("%#x ",v);flag=1; break;}};if (flag==1)while(1){ v=GetKeyState(VK_ESCAPE);if (v ==0) {flag=2; break;}};if (flag==2) break; } while(1);cout << "Esc pressed." << endl; return 0;}实际上有时是这样,有时不是这样。原因不详。也许不能简单地用 do while,而要写完整的 API 程序,在LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){。。。switch (message){在这里 处理消息}}如果你不是做作业,而是为了实用,那么不如直接用 getch(),返回 0x001b 就是 ESC.#include <stdio.h>#include <stdlib.h>#include <conio.h>main( ){ int key;while(1){if (!kbhit()){// printf("do whatever...\n"); 做其他的事} else {key = getch(); if (key==0x001b){printf("ESC key"); break;};};}return 0;}

qq_花开花谢_0

可以使用 while ((nret = GetKeyState(VK_ESCAPE)) > 0); 这样可以在debug中查看nret的值
打开App,查看更多内容
随时随地看视频慕课网APP