2016-12-30 19 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

相關問題