这个字符计数程序包括换行符吗? #包括 /*计算输入中的字符数;第二版*/ main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc) ; printf(“%.0f\n”,nc); }

这个字符计数程序包括换行符吗? #包括 /*计算输入中的字符数;第二版*/ main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc) ; printf(“%.0f\n”,nc); },c,C,当我编译并运行程序并键入一个字符(例如:abcd)时,按enter键,然后按转义字符CTRL+Z,它会显示5。这是因为“隐藏”换行符还是将EOF命令计算在内?因为当我单独键入EOF命令时,它保持为0。是 getchar等待您输入“某物”;Enter是“something”(也就是说,它有一个已定义的字符值;其他键(例如Shift键)可能没有) 出于同样的原因,组合键Ctrl+Z也可以是“某物”——大多数系统上的值26——但您使用的标准输入/输出库将此特定代码视为一个特殊命令:EOF。在我的操作系

当我编译并运行程序并键入一个字符(例如:abcd)时,按enter键,然后按转义字符CTRL+Z,它会显示5。这是因为“隐藏”换行符还是将EOF命令计算在内?因为当我单独键入EOF命令时,它保持为0。

getchar
等待您输入“某物”;Enter是“something”(也就是说,它有一个已定义的字符值;其他键(例如Shift键)可能没有)

出于同样的原因,组合键Ctrl+Z也可以是“某物”——大多数系统上的值
26
——但您使用的标准输入/输出库将此特定代码视为一个特殊命令:
EOF
。在我的操作系统Mac OSX上,这将是Ctrl+D(原因我不知道,除了“历史上,Ctrl+D用于在类Unix系统上发出EOF信号”)

“换行符”绝不是“隐藏的”或“不可见的”,它只是另一个被读取并存储到变量或字符串中的数字,如果您指示它这样做的话。您之所以看不到它,是因为
putchar
和其他文本打印功能执行的不是“显示关联字符”的操作:它将光标移动到下一行。这也是标准功能的一部分,也是一件好事。毕竟你不想按空格键“移动到下一行”。(事实上,这是该代码的一个常见功能,大多数字体甚至不需要为其设置可显示项。)


有关更多背景信息,请参见。

我想您已经回答了自己的问题,因为当您仅执行EOF时得到0。作为测试,为什么不输入3行文本然后输入一个EOF来确定呢?好的,我现在明白了。在我继续之前,我只想100%确定所有的计划/练习。谢谢。有什么特别的原因让你在《K&R C手册》中把代码计算在“double”中吗?这只是一个例子。请确保复制代码,而不是键入代码。证明:
gechar
#include <stdio.h>

/* count characters in input; 2nd version */
main()
{
    double nc;

    for (nc = 0; getchar() != EOF; ++nc)
        ;

    printf("%.0f\n", nc);
}