0
代碼如下:如何清除C控制檯應用程序中的鍵盤緩衝區?
#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說退()函數可以清除鍵盤緩衝區,但我並沒有在Linux上運行。
我看到某處C++標準庫的std :: cin.igore()也可以得到相同的效果。
但是如何在C語言中實現它?
您不應該清除輸入緩衝區。由於某種原因,用戶可能會將數據放入其中。 –
哇!信號處理程序中禁止所有的stdio函數。不要這樣做。 –