从 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|
这里是一个循环,重复从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|