2014-04-17 72 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