Code Bye

用getch()时怎么样清除输入缓冲

写了个小程序,在VS2010下编绎通过。
程序运行时出现一个问题,就是连续快速多次按下左右方向键时,输入缓冲没有被清除,再次扫描输入时,没有按下键,程序也继续执行,直到输入被完全捕获。
这和本人的设计思路是不一样的,本人是想让程序扫描一次输入后,程序执行期间但并没有再次执行到扫描动作之前全部键盘输入无效。
所以问题还是:用getch()时怎么样清除输入缓冲。
请高手帮解决下。
//一个射击小程序
#include <stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define MOVETO(x,y) printf(“\033[%d;%dH”, (x), (y)) //光标定位
#define HIDH printf(“\033[?25l”)//隐藏光标;
int main(void)
{
system(“title 打飞机”);
system(“mode con cols=50 lines=20”);
HIDH;
char ch =0;
putchar(“0”);
int j ;
for (j= 0; j<11; j++)//输出界面
{
MOVETO(j,31);
putchar(“*”);
}
MOVETO(11,0);
for (j = 0; j<31; j++)//输出界面
putchar(“*”);
int k = 0;
int x = 0, y = 0 , i;
while (ch != 27) //Esc键退出
{
MOVETO(10,y);
putchar(“O”);
//rewind(stdin);//试图清除输入缓冲。经测试:无用
//fflush(stdin);//试图清除输入缓冲。经测试:无用
ch = _getch();
if (ch == -32)//按下方向键后,会产生两个字符 (-32 )和别一个字符 清除-32
ch = _getch();
putchar(“\b”);//
putchar(0);//清除屏幕上的字符
//fflush(stdin);//没用意义。
//if(ch == 72 && x >0)
// x–;
if (ch == 77 && y<30)//假如按下右方向键同时没出界
y++;
//if(ch == 80 && x<10)
// x++;
if (ch == 75 && y>0 )//假如按下左方向键,同时没到最左边
y–;
for (i=9; i>0; i–)//输出子弹远动轨迹
{
MOVETO(i,y);
putchar(“*”);//输入“字弹”
j = 3000;
while (j–)//设置延时
printf(“\b*”);
putchar(“\b”);
putchar(0);
}
}
return 0;
}
解决方案

20

int k;
while (1) {
 if (kbhit()) {
  k=getch();
  if (0==k || 0xE0==k) k=k<<8|getch();
 } else break;
}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用getch()时怎么样清除输入缓冲