我是编程和学习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.我只是认为缓冲区需要每次按下回车键后清除。
很抱歉,如果不允许发布此帖子,则会在需要时删除。
答案 0 :(得分:1)
这里有两个缓冲区:一个是键盘缓冲区,另一个是C标准缓冲区(输入缓冲区)
当您按下键盘按钮然后将字符存储在键盘缓冲区中。因此,当您同时键入ZK
时,它只会存储在键盘缓冲区中。在按 Enter 键时,它将转到C标准缓冲区,再添加一个字符\n
(按 Enter 键生成)。
getchar
逐个字符地读取输入。在第一个代码中,第一个getchar
会将Z
读为firstInit
,第二个getchar
会将K
读为lastInit
。现在,输入缓冲区中只剩下\n
对于第二个代码也是如此,除了\n
被第三个getchar
读取并被丢弃。
如果在每个字符Z
和K
后按 Enter 键,则必须在读取第一个字符后清除输入缓冲区以存储K
lastInit
。