![]() |
/* Example: Word Counting |
![]() |
Source: K&R2, p.20 |
![]() |
*/ |
![]() |
|
![]() |
#include <stdio.h> |
![]() |
|
![]() |
#define IN 1 /* inside a word */ |
![]() |
#define OUT 2 /* outside a word */ |
![]() |
|
![]() |
/* count lines, words, and characters in input */ |
![]() |
|
![]() |
void main () { |
![]() |
int c, nl, nw, nc, state; |
![]() |
|
![]() |
state = OUT; |
![]() |
nl = nw = nc = 0; |
![]() |
while ((c = getchar()) != EOF) { |
![]() |
++nc; |
![]() |
if (c == ' ') |
![]() |
++nl; |
![]() |
if (c == ' ' || c == ' ' || c == ' ') |
![]() |
state = OUT; |
![]() |
else if (state == OUT) { |
![]() |
state = IN; |
![]() |
++nw; |
![]() |
} |
| There is no other else. If we are inside the word, but we also were inside when reading previous character, there is nothing to do - state is already IN and there is nothing to count. | |
![]() |
} |
![]() |
printf("%d %d %d ", nl, nw, nc); |
![]() |
} |