从 stdin 读取,然后清除 stdin

Reading from stdin, and clearing stdin afterward

这里是一个循环,重复从stdin中获取两个字符并输出它们。

char buf[2];
while (1)
{
    printf("give me two characters: ");
    fflush(stdout);

    read(0, buf, 2);
    printf("|%c%c|\n", buf[0], buf[1]);
}

问题是当在终端上按下 ENTER 键时,一个换行符被插入并保留在 stdin 缓冲区中,并且将在下一次调用 read 时被抓取。理想情况下,我希望每次调用 read 时都有一个清晰的 stdin 缓冲区,并留下 none 之前的垃圾。你能推荐一个好的解决方案吗?

我尝试了各种库调用,例如 fgets,但是他们遇到了同样的问题。我正在考虑使用 fpurge 手动清除缓冲区,但有人告诉我这不是一个好的解决方案。

这里的问题是剩余的输入应该被当作垃圾处理,然后扔掉。但是,当我下次调用 read 时,我无法区分剩余输入和新输入。

感谢您的输入。

您可以添加getchar();阅读更多 '\n':

#include <stdlib.h>
#include <stdio.h>
char buf[2];

main() {
while (1)
{
    printf("give me two characters: ");
    fflush(stdout);

    read(0, buf, 2);
    getchar();
    printf("|%c%c|\n", buf[0], buf[1]);
}
}

give me two characters: ab
|ab|
give me two characters: xy
|xy|