gpt4 book ai didi

c - 如何在 C 控制台应用程序中清除键盘缓冲区?

转载 作者:行者123 更新时间:2023-11-30 17:52:40 25 4
gpt4 key购买 nike

代码如下:

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>

#define SIZE 1024
char buffer[SIZE] = {0};

void timeout(int sig);

int main(void)
{
signal(SIGALRM, timeout);
alarm(3);

printf("[Input]: ");
fflush(stdout);

fgets(buffer, SIZE, stdin); // #1, enter some contents

return 0;
}

/* if #1 is not over within 3 seconds
I want to clear the keyboard buffer filled at #1, and reenter some new contents
*/
void timeout(int sig)
{
printf("\r \r[Input]: ");
fflush(stdout);

// clear the keyboard buffer pressed at #1
// ... // how to implement it?

fgets(buffer, SIZE, stdin); // #2, reenter some new contents
printf("%s", buffer); // I expect it output the contents filled at #2 only, not include that of #1

exit(0);
}

微软的CSDN说rewind()函数可以清除键盘缓冲区,但我在linux上不行。
我在某处看到C++标准库的std::cin.igore()也能得到同样的效果
但如何用C语言实现呢?

最佳答案

由于 stdin 是终端,因此您可以使用 tcflush 函数。

tcflush(STDIN_FILENO, TCIFLUSH);

看看man page包含正确的头文件。您还可以查看select man page ,并停止使用闹钟。

关于c - 如何在 C 控制台应用程序中清除键盘缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16034476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com