2016-12-30 49 views
-1

这个例子来自Dennis Ritchie和Brian Kernighan的“The C Programming Language”。应该输入用户输入的字符,然后当EOF被声明时(使用我的Mac,它是ctrl-D),它会结束程序并显示输入的字符数量。相反,它将字符数量的实际值加倍。我错过了什么吗?谢谢。为什么这个字符在C计数程序中将字符的值加倍?

#include <stdio.h> 

main() 
{ 
    long nc; 

    nc = 0; 
    while (getchar() != EOF) 
     ++nc; 
    printf("%1d\n", nc); 
} 
+6

因为你也在计算'newlines'。 'getchar()'读取*每个*输入。 –

+4

也用int格式说明符打印一个long。编译器应该已经警告过你。 – Unimportant

+0

除了你指出的实际问题之外,你的'main'函数应该有一个返回类型。此外,就像@ user1320881所说,你的printf格式说明符是错误的。它在GCC中产生以下警告:'格式'%d'需要类型为'int'的参数,但参数2类型为'long int' –

回答

5

它不加倍值,例如,如果你键入:

a 
b 
c 
Ctrl+D 

你会看到6原因有像每个字符后line break

a\n 
b\n 
c\n 
Ctrl+D 

\n是视为一个字符(如果没有错,在mac中line break字符是\r)。

如果键入:

abc 
Ctrl+D 

你将不得不因为line break的4个字符在abc序列的末端。


注:其他成员注意到你使用了错误的格式化字符long类型,它必须是%ld,但使用的是%1d(1代替L)我认为这是一个错误,当你复制代码。


希望能回答你的问题。

+0

用于识别'%1d'错字的UV。 –

+0

其次.... – Unimportant

相关问题