c - 为什么这个 C 语言字符计数程序将字符的值加倍?

标签 c

此示例来自 Dennis Ritchie 和 Brian Kernighan 所著的《C 编程语言》。它应该接受用户输入给出的字符,然后当声明 EOF 时(使用我的 Mac,它是 ctrl-D),它会结束程序并显示输入的字符数。相反,它使字符数量的实际值加倍。我错过了什么吗?谢谢。

#include <stdio.h>

main()
{
    long nc;

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

最佳答案

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

a
b
c
Ctrl+D

您将看到6,因为每个字符后面都有一个换行符,例如:

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

\n 被视为一个字符(如果没记错的话,在 mac 中 换行符 字符是 \r)。

如果您输入:

abc
Ctrl+D

由于 abc 序列末尾的换行符,您将拥有 4 个字符。

<小时/>

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

<小时/>

希望能回答您的问题。

关于c - 为什么这个 C 语言字符计数程序将字符的值加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41402623/

相关文章:

c - const 指针参数在调用函数时如何优化?

c - 如何在纯 C 中将 precomposedStringWithCanonicalMapping 与 CFStringref 一起使用

c - C语言中,如何用指针计算一个字符串中有多少个元音字母?

调用系统 UNIX - C 中的文件复制

c - 在二维数组 c 上使用 realloc

c++ - GCC 如何处理内置函数

c - "12345"+ 2 在 C 中做什么?

c - 如何打开不在同一文件夹中的文本文件?

c++ - 锁定文件,使其无法删除

c++ - 如何编写 C 或 C++ 程序来充当内存和 CPU 周期填充器?