2014-10-03 32 views
0

我一直在閱讀K & R的The C Programming Language。當我在示例程序輸入17頁的計算行,程序總是結果總是0。這裏是我的代碼:17行計數程序結果始終爲0

/* Taken from The C Programming Language by Brian W. Kernighan and 
* Dennis M. Ritchie */ 

/* Include statement added for compatibility */ 
#include "stdio.h" 

main() /* count lines in input */ 
{ 
    int c, nl; 

    nl = 0; 
    /* EOF in Linux is ctrl-D and ctrl-Z on Windows */ 
    while ((getchar()) != EOF) 
    if (c == '\n') 
     ++nl; 
    printf("%d\n", nl); 
} 
+1

這段代碼在各方面都與K&R版本相同嗎? – 2014-10-03 01:11:51

+0

不,我從下面的答案中可以看到錯誤的輸入。我仍然不敢相信它是誠實的。我一遍又一遍地看了半個小時,仍然錯過了我的錯誤。不過謝謝你的回覆。很抱歉這麼做。 – Guest123ABC 2014-10-03 01:29:03

回答

4
while ((getchar()) != EOF) 

應該

while ((c = getchar()) != EOF) 

請問您的副本這本書真的弄錯了嗎?我檢查了我的,這是第二版,它有第19頁上的程序,而不是你的17,並且代碼是正確的。

當你開始用C編程時,會給你帶來巨大利益的東西是總是啓用所有可用的編譯器診斷。在這種情況下,gcc -Wall -Wextra -Werror拒絕編譯該程序,並說:

error: ‘c’ may be used uninitialized in this function [-Werror=uninitialized] 
+2

好的。 FWIW,我不會這樣寫的;我會寫兩行代碼。正是這種可愛讓人們陷入困境。 – 2014-10-03 01:12:32

+0

不,不!非常抱歉。我只是讀了十幾遍!我不敢相信!非常抱歉!非常感謝您的回答! – Guest123ABC 2014-10-03 01:15:20

+1

好吧,沒問題,請請下次啓用您的編譯器警告,額外警告和錯誤。這將避免大量的問題寫作。 :) – 2014-10-03 01:17:57