我不理解K& R练习1-12的代码示例中的差异

时间:2015-02-11 15:04:23

标签: c

我试图找出K& R练习1-12并偶然发现了这个答案:

#include <stdio.h>

#define IN  1
#define OUT 0

main()
{

int c, state;

state = OUT;

while ((c = getchar()) != EOF) {
    if (c != ' ' && c != '\n' && c != '\t') {
        state = IN;
        putchar(c);
    }
    else
        if (state == IN) {
            state = OUT;
            putchar('\n');
        }
}

if (state == IN)
    putchar('\n');
}

是什么目的

 if (state == IN)
    putchar('\n');

如果我从代码中取出它仍然运行完全相同。有些人可以向我解释将额外的if语句放入代码中的目的。

还有没有更简单的方法来编写这段代码而不使用书籍章节之前的东西?

1 个答案:

答案 0 :(得分:4)

如果结束状态是OUT,就像通常那样,则没有区别。如果结束状态是IN(即输入没有尾随空格,例如换行符),则使用换行符终止输出的最后一行。