gpt4 book ai didi

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

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

我是编程和学习 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/

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