2014-04-17 99 views
1

因此,我使用GetAsyncKeyState()來查看何時按下某個鍵。但是,在使用它之後,我需要使用getch()。但似乎getch()再次得到GetAsyncKeyState()得到的任何東西。這是我簡化代碼的版本:如何在使用getch()之前清理輸入緩衝區?

#include <graphics.h> 

int main() 
{ 
    initwindow(100, 100); 

    while(true) 
    {   
     if (GetAsyncKeyState(VK_RETURN)) //wait for user to press "Enter" 
      break; 
     //do other stuff 
    } 

    getch(); //this is just skipped 

    return 0; 
} 

我想我需要在使用getch()之前清理輸入緩衝區。但是如何? PS:GetAsyncKeyState()是我必須使用的,我還沒有找到任何替代getch(),它可以與BGI窗口一起工作,並且可以解決問題。 希望得到一些建議,謝謝。

回答

1

它跳過getch()電話怎麼一回事,因爲的enter用戶對先前的輸入壓,並getch越來越即char,功能fflush(stdin)我們刷新輸入流。 以便getch()將從輸入流中讀取新輸入。

#include <graphics.h> 

int main() 
{ 
    initwindow(100, 100); 

    while(true) 
    {   
     if (GetAsyncKeyState(VK_RETURN)) //wait for user to press "Enter" 
      break; 
     //do other stuff 
    } 
    fflush(stdin); 
    getch(); //this is just skipped 

    return 0; 
} 
+0

很抱歉,但它似乎並沒有工作。即使我在fflush之前放置Sleep(1000),應用程序仍會跳過getch。 – user3496846

3
+0

我不知道我在做什麼錯,但它仍然跳過getch。我能用bgi圖形窗口工作的事實是這樣嗎?感謝您的回答。 – user3496846

+0

@ user3496846:可以。我不熟悉bgi圖形。我認爲'getch'與WINAPI中的getch'一樣,在這種情況下,這應該起作用。顯然它不是。你想從'getch'得到什麼樣的行爲?您可以完全用WINAPI函數來模擬它。例如,從另一個問題來看我的這個答案:http://stackoverflow.com/a/8177635/440119 –

+0

我想要做的是從鍵盤讀取一個字符而不需要控制檯窗口處於活動狀態(在我的情況下BGI窗口是活動的)。而且我不想讓char成爲現在正在發生的「Enter」鍵的代碼。有沒有辦法用WINAPI函數讀取字符?謝謝你的幫助。 – user3496846