我正在用C编写一个基本程序,使用Windows API读取标准输入并在标准输出上完美地显示它。整个程序运行良好,但当我退出程序时,终端输入上留下了一些尾随字符。也许我对它有点太挑剔了,但对我来说,这太令人沮丧了。
代码如下所示:
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
/*********************************************************/
/* ClearScreen function definition .... */
struct Keys {
unsigned int k1: 1;
unsigned int k2: 1;
unsigned int k3: 1;
unsigned int k4: 1;
};
void check_key(struct Keys* keys)
{
keys->k1 = 0; keys->k2 = 0; keys->k3 = 0; keys->k4 = 0;
if (GetKeyState('A') & 0x8000)
{
keys->k1 = 1;
}
if (GetKeyState('S') & 0x8000)
{
keys->k2 = 1;
}
if (GetKeyState('D') & 0x8000)
{
keys->k3 = 1;
}
if (GetKeyState('F') & 0x8000)
{
keys->k4 = 1;
}
}
void print_keys(struct Keys keys)
{
ClearScreen();
printf("K1 = %d | K2 = %d | K3 = %d | K4 = %d",
keys.k1, keys.k2, keys.k3, keys.k4);
printf("\n");
printf("P1 = 1");
}
int main ()
{
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return -1;
struct Keys keys = {0, 0, 0, 0};
while (1)
{
check_key(&keys);
print_keys(keys);
Sleep(100);
}
CloseHandle(hStdOut);
return 0;
}
- 示例:**
假设我正在运行这个程序,并输入下面的击键序列 "zczxcvcvbxxvbc"。在程序执行后,我的终端上留下了这个:
我想要实现的是使用后有清晰的终端输入,没有那些字符到位。
有没有办法做到这一点?
1条答案
按热度按时间unftdfkk1#
程序没有请求任何输入。所以你输入的缓冲区随后出现在shell中。windows程序可以这样做
来吸收这些按键。
您可能希望使用
_kbhit
和_getch
来避免编译器警告。