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

时间:2016-12-30 20:58:27

标签: c

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

#include <stdio.h>

main()
{
    long nc;

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

1 个答案:

答案 0 :(得分:5)

例如,如果键入:

,则值不会加倍
a
b
c
Ctrl+D

您会看到6因为每个字符后都有line break,如:

a\n
b\n
c\n
Ctrl+D

\n被视为一个字符(如果没有错,则在line break字符为\r的mac中)。

如果您输入:

abc
Ctrl+D

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

注意:,因为其他成员发现您使用了long类型的错误格式字符,但它必须是%ld,但您使用的是%1d(1而不是l)我认为复制代码时会出错。

希望能回答你的问题。