c - "C programming language"- 字符计数异常?

标签 c output character counting

Ritchie & Kernighan 着的 C Programming Language 一书中,在 §1.5.2 Counting Characters 中,给出了该程序的两个版本:

#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'

仅供引用:我在 MacOS 10.13.5 的终端上运行所有这些,文本已在 Atom 中输入。

最佳答案

它算“多一个”,因为 \n 也算在内。

例如:

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

输出:

4

但是换行:

echo "asdf" | ./a.out

输出

5

关于c - "C programming language"- 字符计数异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51583933/

相关文章:

tsql - T-SQL获取2个字符串的字符匹配百分比

C从两个单词之间的字符串中提取单词

c - 使用复合赋值的优势

c - Netfilter 内核模块拦截数据包并记录它们

R sink() 消息并输出到同一文件 - 完整性检查

java - While 循环检查字符输入

c - 这应该是 int,那我们为什么要使用 %s?

c++从文件中读取并输出排序的内容

java - 使用 "screen"命令进行输出重定向

角色游戏 - C 编程