我正在使用 Windows API 在 C 中编写一个基本程序,以从标准输入读取并在标准输出上完美显示。整个程序运行良好,但一旦我退出程序,终端输入中就会留下一些尾随字符。也许我对此有点太尖锐了,但对我来说,这太令人沮丧了。
代码如下:
#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”。程序执行后,我的终端上留下了这个:
我想要实现的是使用后终端输入清晰,没有那些字符。
有什么办法可以做到这一点吗?
程序没有请求任何输入。所以你输入的缓冲输入随后出现在 shell 中。 Windows程序可以做
while (1)
{
check_key(&keys);
print_keys(keys);
while(kbhit())
getch();
Sleep(100);
}
在循环中吸附那些按键。
您可能想使用
_kbhit
和 _getch
来避免编译器警告。