有没有C函数可以在程序执行后清除命令行输入?(特别是Windows)

zpqajqem  于 2023-03-07  发布在  Windows
关注(0)|答案(1)|浏览(118)

我正在用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"。在程序执行后,我的终端上留下了这个:

我想要实现的是使用后有清晰的终端输入,没有那些字符到位。
有没有办法做到这一点?

unftdfkk

unftdfkk1#

程序没有请求任何输入。所以你输入的缓冲区随后出现在shell中。windows程序可以这样做

while (1)
{
    check_key(&keys);
    print_keys(keys);
    while(kbhit()) 
       getch(); 
    Sleep(100);
}

来吸收这些按键。
您可能希望使用_kbhit_getch来避免编译器警告。

相关问题