这是一个非常基本的C问题,来自Kernighan和Ritchie的第18页.
我编译了这个非常简单的代码来计算从键盘输入的字符:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%1d\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
这个编译很好,运行正常,并且表现得非常符合预期,即如果我输入"Hello World",当我按下CTRLD以给出EOF字符时,它返回值11 .
令我困惑的是,如果我犯了错误,我可以使用退格键删除字符并重新输入它们,它只返回终端在调用EOF时显示的字符数.
如果代码计算每个字符,包括特殊字符,如果我输入四个字符,删除两个,再输入另外两个,那么输出不应该是8个字符(4个字符+2个del + 2个字符),而不是4个字符?
我显然误解了C如何处理退格,以及代码如何/何时递增变量nc?