Ritchie&Kernighan撰写的 C编程语言书中的 §1.5.2计数字符 中,给出了该程序的两个版本:
#include <stdio.h>
/* count characters in input; 1st version */
int main() {
long nc;
nc = 0;
while (getchar() != EOF)
{
++nc;
}
printf("%ld\n", nc);
}
和
#include <stdio.h>
/* count characters in input; 2nd version */
int main() {
double nc;
for (nc = 0; getchar() != EOF; ++nc) {
; // null statement
}
printf("%.0f\n", nc);
}
它们都可以编译和工作,但总是输出比实际单词数多一个字符。
示例:
"milestone" (9 characters) outputs 10
"hello, world" (12 characters) outputs 13
这是为什么?
它是在按键盘上的Return键来计算'\0'
字符还是'\n'
给出的字符?
仅供参考:我正在Mac OS 10.13.5 的Terminal上运行所有这些程序,并且文本已在 Atom 中输入。
答案 0 :(得分:3)
因为“ \n
也被计算在内,所以它算作“一个”。
例如:
echo -n "asdf" | ./a.out
输出:
4
但使用换行符:
echo "asdf" | ./a.out
它输出
5