我是编程和学习 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
将读取 Z
到 firstInit
中,第二个 getchar
将读取 K
到 lastInit
。现在,输入缓冲区中只剩下 \n
。
第二个代码也是如此,只是 \n
被第三个 getchar
读取并被丢弃。
如果在每个字符 Z
和 K
之后按 Enter 键,那么您必须在读取第一个字符后清除输入缓冲区才能存储lastInit
中的 K
。
关于c - 使用 getchar() 时,为什么首先需要清除输入键的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983186/