K& R部分1.5.3线路计数

时间:2015-12-15 06:39:14

标签: c

我刚刚回答了K& R的一个问题,其中"写了一个计算空白,标签和换行符的程序"

而且我的代码是

#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;
}

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

1 个答案:

答案 0 :(得分:1)

当你宣称自己是学识渊博的时候,我只想补充一些评论。

您应始终将main声明为int main(...)。在早期(K&amp; R)时代,假定每个没有正确声明的函数返回int,但在现代版本中不推荐使用。

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

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