我正在阅读的一本初学者的C书籍让我对getchar()和缓冲区顺序(特别是与换行符有关)感到困惑。它说,
printf("What are your two initials?\n");
firstInit = getchar();
lastInit = getchar();
首先,我不理解作者对
\n
为什么要变成lastInit
而不是T
的解释。我猜是因为我将缓冲区可视化为“先进先出”。无论哪种方式,我都不了解作者提出的命令背后的逻辑-如果用户输入G
,T
,然后Enter,那么第一个G
捕获getchar()
的方式如何,Enter捕获(换行符)的方式是第二个getchar()
,第三个T
捕获了getchar()
?令人费解。其次,我自己尝试了一下(Ubuntu 14.04在Windows 8.1下的VMWare上运行,文本编辑器Code::Blocks,编译器gcc),我得到了笔者认为没有发生的确切常识结果!:
G
转到firstInit
和T
转到lastInit
。这是我的代码:#include <stdio.h>
main()
{
char firstInit;
char lastInit;
printf("What are your two initials?\n");
firstInit = getchar();
lastInit = getchar();
printf("Your first initial is '%c' and ", firstInit);
printf("your last initial is '%c'.", lastInit);
return 0;
}
输出为:
What are your two initials?
GT
Your first initial is 'G' and your last initial is 'T'.
我还创建了一个后续程序,该程序似乎确认换行符最后是从缓冲区中出来的:
main()
{
char firstInit;
char lastInit;
int newline;
printf("What are your two initials?\n");
firstInit = getchar();
lastInit = getchar();
newline = getchar();
printf("Your first initial is '%c' and ", firstInit);
printf("your last initial is '%c'.", lastInit);
printf("\nNewline, ASCII %d, comes next.", newline);
return 0;
}
输出为:
What are your two initials?
GT
Your first initial is 'G' and your last initial is 'T'.
Newline, ASCII 10, comes next.
那么我在这里错过了什么吗,还是作者错了? (或者这是否依赖于编译器,即使作者没有这么说)?
书籍:《 C编程绝对入门指南》,第3版,Greg Perry,©2014,Ubuntu 14.04,gcc编译器版本4.8.4
最佳答案
作者正在描述用户键入“G T ”的情况。
关于c - getchar()和缓冲区顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31791938/