gpt4 book ai didi

c - 从 stdin 读取,然后清除 stdin

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:31 27 4
gpt4 key购买 nike

这是一个循环,它重复地从 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 时,我无法区分剩余输入和新输入。

感谢您的输入。

最佳答案

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

关于c - 从 stdin 读取,然后清除 stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102186/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com