从stdin读取,然后清除stdin

时间:2015-01-23 02:39:59

标签: c stdin

这是一个循环,重复从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缓冲区,之前没有剩余的垃圾。你能推荐一个好的解决方案吗?

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

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

感谢您的投入。

1 个答案:

答案 0 :(得分:1)

你可以添加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|