我刚刚回答了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;
}
输出运行完全相同.. 但这本书得到了不同的答案。 所以我不正确吗?
答案 0 :(得分:1)
当你宣称自己是学识渊博的时候,我只想补充一些评论。
您应始终将main
声明为int main(...)
。在早期(K&amp; R)时代,假定每个没有正确声明的函数返回int,但在现代版本中不推荐使用。
while ((c = getchar()) != EOF)
是正确的,因为c
被声明为int。但是你的缩进是误导性的:最好将else if
或else
写在与原始if相同的水平上。
最后(即使它是一个品味问题),你没有在任何一个集团周围放置大括号。这是正确的,因为在每个if
之后只有一个语句,在这种情况下,单个指令的完整if ... else ...
计数。但这对于现实世界计划中的未来维护者来说将是一场噩梦。我的建议是,如果你缩进,总是写大括号,只有当指令写在与if相同的行上时才省略它们。