这是一个非常基础的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);
}
这段代码可以顺利编译运行,并且基本符合预期。例如,当我输入 "Hello World" 时,在按下 CTRLD 输入EOF字符后,它返回值为11。
然而,如果我犯了错误,使用退格键删除字符并重新输入,那么它只返回终端显示的字符数量,在调用EOF时。
如果代码包括特殊字符在内计算每个字符,那么如果我输入四个字符,删除两个,然后再输入两个,那应该输出8个字符(4个字符+2个删除+2个字符),而不是4个?
我显然误解了C如何处理退格键以及代码何时增加变量“nc”的计数。
getchar
不会读取删除操作。 - Some programmer dudeint main(void)
而不是main()
。 - Spikatrixreturn
都是不好的风格,应该避免使用。 - too honest for this sitemain() { printf("hello, world\n"); }
是错误的...... 在C90中会引发未定义行为(没有返回类型),而在后续版本中甚至无法编译(不允许隐式int)。 - Lundin