是否有C函数可以在程序执行后清除命令行输入? (尤其是 Windows)

问题描述 投票:0回答:1

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

我想要实现的是使用后终端输入清晰,没有那些字符。

有什么办法可以做到这一点吗?

c winapi console-application
1个回答
1
投票

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

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

在循环中吸附那些按键。

您可能想使用

_kbhit
_getch
来避免编译器警告。

© www.soinside.com 2019 - 2024. All rights reserved.