summaryrefslogtreecommitdiff
path: root/ch1/wc.c
blob: 4a5007d65b655cd84e93c6719b79e47f342e57c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<stdio.h>

#define     IN      1   // inside a word
#define     OUT     0   // outside a word

/*
 * Count lines, words, and characters in input.
 */
main() {
    int c, nl, nw, nc, state;

    state = OUT;
    nl = nw = nc = 0;

    while ((c = getchar()) != EOF) {
        ++nc;
        
        if (c == '\n')
            ++nl;
        if (c == ' ' || c == '\n' || c == '\t')
            state = OUT;
        else if (state == OUT) {
            state = IN;
            ++nw;
        }
    }

    printf("%d %d %d\n", nl, nw, nc);
}