这个字符计数程序是否包含换行符?

时间:2014-11-22 01:24:46

标签: c

#include <stdio.h>

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

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

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

当我编译并运行程序并输入一个字符(例如:abcd)时,按Enter键,然后点击转义字符CTRL + Z,它说5.是因为&#34;隐藏&#34;换行符或是否计算EOF命令?因为当我单独输入EOF命令时它保持为0。

1 个答案:

答案 0 :(得分:1)

getchar等你输入“东西”;和输入是'某事'(也就是说,它有一个已定义的字符值;其他键,例如 Shift )。

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

'换行符'绝不是“隐藏”或“不可见”,它只是另一个数字,如果你指示它,它会被读取并存储到变量或字符串中。您无法看到它的原因是因为putchar和其他文本打印功能执行的操作不是“显示相关字符”:它将光标移动到下一行。这也是标准功能的一部分,也是一件好事。毕竟你不想按 Space 来“移动到下一行”。 (实际上它是这个代码的一个常见功能,大多数字体甚至都懒得有一个可显示的项目。)

有关更多背景信息,另请参阅What does getchar() exactly do?

相关问题