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

时间:2011-01-12 17:24:51

标签: c macos operating-system

直接离开K& R,我有

#include <stdio.h>

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

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

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

2 个答案:

答案 0 :(得分:9)

当您键入时,终端实际回显您的控件-D(并将其打印为^D),然后您的程序用数字覆盖该行。换行。因此,您的一位数字会覆盖^,但D会留在那里。

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

答案 1 :(得分:1)

程序运行正常:打印6。

你看到6D因为终端窗口打印^ D然后回到行的开头,你的程序在^上打印6留下以下D.尝试将输出重定向到一个文件,或给它足够的输入答案有多个数字,你不会看到D。

由于换行符,答案是6而不是5,是的。如果您不想在最后计算换行符,请减去1.如果您不想计算任何换行符,请在看到换行符时减去1。