在Mac OS X上计算C中的字符数

R u*_*c k 3 c macos operating-system

直接离开K&R,我有

#include <stdio.h>

main() {
    long nc;
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

我在Mac OS X上,所以我编译它,运行它,键入"12345",按Enter键换行换行(这是我猜的第六个字符)然后点击ctrl-D发送一个EOF.

东西打印出"6D".为什么D在那里?如何编写程序来计算"12345"中的5个字符而不是换行符?我应该在最后减去一个吗?如何让它停止打印D?

Gyo*_*yom 9

什么情况是,终端实际相呼应的控制d(并打印出来的^D),当你键入它,但那么你的程序覆盖了一些和换行该行.所以你的一位数字会覆盖^,但D留在那里.

如果您输入的字符数超过10个,或者通过在格式字符串末尾添加空格来更改代码("%ld \n"),那么您的程序将覆盖^D(尽管它仍然会被您的终端回显)