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

时间:2014-06-01 18:42:14

标签: c buffer clear 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.我只是认为缓冲区需要每次按下回车键后清除。

很抱歉,如果不允许发布此帖子,则会在需要时删除。

1 个答案:

答案 0 :(得分:1)

这里有两个缓冲区:一个是键盘缓冲区,另一个是C标准缓冲区(输入缓冲区) 当您按下键盘按钮然后将字符存储在键盘缓冲区中。因此,当您同时键入ZK 时,它只会存储在键盘缓冲区中。在按 Enter 键时,它将转到C标准缓冲区,再添加一个字符\n(按 Enter 键生成)。
getchar逐个字符地读取输入。在第一个代码中,第一个getchar会将Z读为firstInit,第二个getchar会将K读为lastInit。现在,输入缓冲区中只剩下\n 对于第二个代码也是如此,除了\n被第三个getchar读取并被丢弃。

如果在每个字符ZK后按 Enter 键,则必须在读取第一个字符后清除输入缓冲区以存储K lastInit