2015-12-15 61 views
1

我只回答了一个问题给K & R,它是“写计数空格,制表符和换行符程序”K&R第1.5.3行计数

而且我的继承人代码

#include <stdio.h> 
#include <stdlib.h> 

main() 
{ 
/* Program counts Number of lines, Spaces, and Tabs from user input*/ 

int c, nl,tabs,spaces; 
spaces = 0; 
tabs = 0; 
nl = 0; 

while ((c = getchar()) != EOF) 
      if(c =='\t') 
       ++tabs; 
        else if(c==' ') 
         ++spaces; 
         else if (c == '\n') 
           ++nl; 

printf("Newlines %d\nTabs %d\nSpaces %d", nl, tabs, spaces); 
return 0; 
} 

的输出运行完全一样.. 但书得到了不同的答案。 所以我不正确?

+0

它不需要像书中一样编写程序。它可以用很多方式完成。 – ameyCU

+0

谢谢,我以为我错了 – Saitama

+0

换行数和行数注意它们不一定一致。 – BLUEPIXY

回答

1

正如你宣布自己是一个学会,我只是添加一些评论。

您应该始终声明mainint main(...)。在早期(K & R)时间,没有正确声明的每个函数都被假定为返回int,但在现代版本中已被弃用。

while ((c = getchar()) != EOF)是正确的,因为c被声明为int。但是你的缩进是误导性的:编写else ifelse最好与原始if相同。

最后(即使它是一个味道的问题),你没有在任何集合周围放上大括号。这是正确的,因为在每个if之后有一个单独的语句,在这种情况下,单个指令的完整if ... else ...计数。但是这对于未来的维护者来说真的是一场噩梦。我的建议是,如果缩进,总是写大括号,并且只有当指令与if写在同一行时才会省略它们。

+0

谢谢你的澄清,我将在未来的编码使用大括号。再次感谢它提供的信息。 – Saitama