"C programming language" - 计算字符异常?



在Ritchie&Kernighan,在§1.5.2计数字符中,给出了两个版本的程序:

#include <stdio.h>
/* count characters in input; 1st version */
int main() {
long nc;
nc = 0;
while (getchar() != EOF)
{
++nc;
}
printf("%ldn", nc);
}

#include <stdio.h>
/* count characters in input; 2nd version */
int main() {
double nc;
for (nc = 0; getchar() != EOF; ++nc) {
; // null statement
}
printf("%.0fn", nc); 
}

它们既可编译又可工作,但总是比实际字数多输出一个字符。

示例:

"milestone" (9 characters) outputs 10  
"hello, world" (12 characters) outputs 13

为什么会这样
是在计算''字符还是我在键盘上按回车键给出的'n'

仅供参考:我正在MacOS 10.13.5上的终端上运行所有这些,文本已输入Atom

因为n也被计算在内,所以它还计算"一个"。

例如:

echo -n "asdf" | ./a.out

输出:

4

但有了一条新线路:

echo "asdf" | ./a.out

它输出

5

它计算您的"输入";输入也是:你的单词+1输入=x+1计数。

如果将第一个值键入为"0";EOF值";对于Windows是cntrl+z,则循环将不计数";输入";因为它将达到";EOF值";在您的";输入";输入和输出将为零。

最新更新