第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么將“ESCAPE”改為“SHIFT”之后,程序又恢復(fù)正常了?

為什么將“ESCAPE”改為“SHIFT”之后,程序又恢復(fù)正常了?

C++
www說 2022-05-31 14:10:36
使用do while語句。while(GetKeyState(VK_ESCAPE)>0);判斷是否按下“ESCAPE”,如果按下則跳出循環(huán),否則繼續(xù)循環(huán)。第一次編譯通過,程序無任何異常,可以正常使用。可是轉(zhuǎn)天再進(jìn)行編譯,不進(jìn)行任何修改,出現(xiàn)問題,循環(huán)只執(zhí)行一次。while語句基本失效,程序不進(jìn)行判斷,直接執(zhí)行一次后結(jié)束??墒牵瑢ⅰ癊SCAPE”改為“SHIFT”之后,程序又恢復(fù)正常了。很詫異,為什么程序放了一天就出了問題,還是說,當(dāng)前"ESCAPE"一直處于按下的狀態(tài)。使用vs2010編譯。
查看完整描述

2 回答

?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

GetKeyState() 是會(huì)出現(xiàn)這樣的問題。
按理,需要調(diào)2次,用它的狀態(tài)來判斷鍵按下了,鍵又抬起了,這才完成了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;}
實(shí)際上有時(shí)是這樣,有時(shí)不是這樣。原因不詳。

也許不能簡(jiǎn)單地用 do while,而要寫完整的 API 程序,在
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
。。。
switch (message){
在這里 處理消息
}
}

如果你不是做作業(yè),而是為了實(shí)用,那么不如直接用 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;}


查看完整回答
反對(duì) 回復(fù) 2022-06-06
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

可以使用 while ((nret = GetKeyState(VK_ESCAPE)) > 0); 這樣可以在debug中查看nret的值

查看完整回答
反對(duì) 回復(fù) 2022-06-06
  • 2 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)