----------------------------------------------- #include #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count4.c - count lines, words, and characters */ 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); } $ gcc count4.c $ ./a.out < count4.c 23 93 525 $ -------------------------------------------------------- 1. Assginment operator "=" evaluated right-to-left, so nl = nw = nc = 0; same as nl = (nw = (nc = 0)); 2. OR operator "||" evaluated left-to-right so (c == ' ' || c == '\n' || c == '\t') same as ((c == ' ' || c == '\n') || c == '\t'). 3. Left-to-right evaluation of && (AND) or || (OR) terminates as soon as truth value of expression known. 4. if (condition) statement1 else statement2 ------------------------------------------------------