2014-10-03 58 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