0

コードは次のとおりです。

#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);
}

Microsoft の CSDN によると、rewind() 関数はキーボード バッファーをクリアできますが、Linux では動作しません。
C++ 標準ライブラリの std::cin.igore() でも同じ効果が得られることをどこかで見ました。
しかし、C言語でそれを実装する方法は?

4

1 に答える 1