为什么C中的字符计数程序会使字符的值加倍?

Man*_*era -1 c

这个例子来自Dennis Ritchie和Brian Kernighan的"The C Programming Language".它应该包含用户输入给出的字符,然后当声明EOF时(使用我的Mac,它是ctrl-D),它结束程序并显示输入的字符数量.相反,它将字符数量的实际值加倍.我错过了什么吗?谢谢.

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%1d\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

you*_*udj 5

它不会使值加倍,例如,如果键入:

a
b
c
Ctrl+D
Run Code Online (Sandbox Code Playgroud)

你会看到6因为line break每个角色之后有一个像:

a\n
b\n
c\n
Ctrl+D
Run Code Online (Sandbox Code Playgroud)

\n被认为是一个角色(如果没有错,那就是mac中的line break角色\r).

如果你输入:

abc
Ctrl+D
Run Code Online (Sandbox Code Playgroud)

由于序列line break的末尾,您将有4个字符abc.


注意:正如其他成员注意到你使用了错误的格式化字符long类型,它必须是%ld你正在使用%1d(1而不是l)我认为你复制代码时是一个错误.


希望能回答你的问题.