c - 使用 getchar() 时,为什么首先需要清除输入键的缓冲区?

标签 c buffer getchar

我是编程和学习 C 的新手:

printf("What are your two initials?\n");
firstInit= getchar();
lastInit = getchar();

========================================

printf("What are your two initials?\n");
firstInit= getchar();
lastInit = getchar();
getchar();

我知道在第一段代码中,如果我输入ZK作为声母,那么Z会放在firstInit中,回车键代表的'\n\会放在lastInit中。剩余的 K 将存储在后续的 getchar() 中。但是,在代码的第二部分中,我正在阅读的书上说如果我输入 ZK 作为首字母,则 firstInit 将保存 Z,而 lastInit 将保存 K。我只是认为需要清除缓冲区每次按下回车键后。

抱歉,如果不允许发帖,如果需要,将删除。

最佳答案

这里有两个缓冲区在起作用:一个是键盘缓冲区,另一个是 C 标准缓冲区(输入缓冲区)。
当您按下键盘按钮时,字符将存储在键盘缓冲区中。因此,当您同时键入 ZK 时,它会简单地存储在键盘缓冲区中。在按下 Enter 键时,它将进入 C 标准缓冲区,其中包含一个字符 \n (在按下 Enter 键时生成)。
getchar 逐字符读取输入。在第一个代码中,第一个 getchar 将读取 ZfirstInit 中,第二个 getchar 将读取 K lastInit。现在,输入缓冲区中只剩下 \n
第二个代码也是如此,只是 \n 被第三个 getchar 读取并被丢弃。

如果在每个字符 ZK 之后按 Enter 键,那么您必须在读取第一个字符后清除输入缓冲区才能存储lastInit 中的 K

关于c - 使用 getchar() 时,为什么首先需要清除输入键的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983186/

相关文章:

c++ - 数据长度过大的解压缓冲区会崩溃

python - 打开时不读取文件的最后一 block

c++ - getchar() 或 putchar() 不断吃掉我输入的第一个字符

c - 使用 getch() 和 getchar() 清除输入缓冲区的区别?

c - 如何使用 C 将 Windows PC 的 MAC 地址分配给字符串变量?

c++ - 如何在 autoconf 中检查 clang 的支持编译标志

PHP - 如何有效地读取大型远程文件并在循环中使用缓冲区

C - 循环中的getchar()?

c - 尝试使用链接列表时出现无限循环

c - 反向抛光转换器