这是一个循环,重复从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
进行下一次调用时,我无法区分剩余输入和新输入。
感谢您的投入。
答案 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|