“ C编程语言”-计数字符异常?

时间:2018-07-29 19:42:35

标签: c output character counting

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 中输入。

1 个答案:

答案 0 :(得分:3)

因为“ \n也被计算在内,所以它算作“一个”。

例如:

echo -n "asdf" | ./a.out

输出:

4

但使用换行符:

echo "asdf" | ./a.out

它输出

5