C 如何避免在循环延迟期间接受输入的字符?

C 如何避免在循环延迟期间接受输入的字符?,c,gcc,C,Gcc,我这里有一个程序,它读取我们通过键盘输入的任何字符,打印它,等待1秒的延迟时间,然后重复整个过程 问题是,我不希望在1秒延迟期间输入的字符被视为要打印的有效输入。 仅需打印延迟1秒后接收到的输入 但使用此代码,即使在延迟期间输入的单个字符也不会被丢弃 我试过了fflush(stdin),但还是不行。我认为它确实清除了缓冲区 有什么想法吗 #include<stdio.h> #include<time.h> void delay(int a) { clock_t t

我这里有一个程序,它读取我们通过键盘输入的任何字符,打印它,等待1秒的延迟时间,然后重复整个过程

问题是,我不希望在1秒延迟期间输入的字符被视为要打印的有效输入。 仅需打印延迟1秒后接收到的输入

但使用此代码,即使在延迟期间输入的单个字符也不会被丢弃

我试过了fflush(stdin),但还是不行。我认为它确实清除了缓冲区

有什么想法吗

#include<stdio.h>
#include<time.h>
void delay(int a)
{
    clock_t t=clock();
    while(clock() - t < a);
}

int main()
{
    delay(5000);
    char c;

    while(1)
    {
        fflush(stdin);
        while(!kbhit());
        c=getch();
        printf("\n%d %c", c, c);
        delay(1000);
    }

}
#包括
#包括
无效延迟(INTA)
{
时钟t=时钟();
while(clock()-t
fflush
仅为输出流定义。所以刷新
stdin
并不能满足您的需要。一个简单的近似解决方案就是在延迟后立即使用
getch
循环消耗所有输入。没有使用标准C的解决方案,需要使用依赖于实现的函数。为什么要这样做?这对用户来说是非常烦人的。@n.m.我正在尝试制作一个程序,该程序将显示用户输入的字符,然后延迟5秒。如果在延迟期间随机输入的字符都被考虑在内,这会让用户感到不舒服,因为用户似乎觉得即使他自己在延迟期间输入了输入,输入也不知从何而来。上面@n.m.的评论已经向您展示了如何做到这一点。只需继续调用
getch
,直到
kbhit
返回false。
fflush
仅为输出流定义。所以刷新
stdin
并不能满足您的需要。一个简单的近似解决方案就是在延迟后立即使用
getch
循环消耗所有输入。没有使用标准C的解决方案,需要使用依赖于实现的函数。为什么要这样做?这对用户来说是非常烦人的。@n.m.我正在尝试制作一个程序,该程序将显示用户输入的字符,然后延迟5秒。如果在延迟期间随机输入的字符都被考虑在内,这会让用户感到不舒服,因为用户似乎觉得即使他自己在延迟期间输入了输入,输入也不知从何而来。上面@n.m.的评论已经向您展示了如何做到这一点。只需继续调用
getch
,直到
kbhit
返回false。