To copy the input to the output, we print every character using
putchar after reading it in with getchar.
#include <stdio.h>
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
In order to detect a sequence of blanks, we need to keep track of
whether the previous character was a blank. We can do this by creating
the variable prev, which we set to the symbolic
constant BLANK after a blank is read in and printed, and
to the constant NOTBLANK after a non-blank character is
read in and printed. We make it so that we only print blanks when
prev is equal to NOTBLANK. prev will
be NOTBLANK when we come across the first blank, so it
gets printed, but any subsequent blanks will get skipped.
#include <stdio.h>
#define BLANK 1 /* previous character was a blank */
#define NOTBLANK 0 /* previous character was not a blank */
main()
{
int c;
int prev; /* whether the previous character was a blank */
prev = NOTBLANK;
while ((c = getchar()) != EOF) {
if (prev == NOTBLANK) {
if (c == ' ') {
putchar(c);
prev = BLANK;
}
if (c == '\t') {
putchar(c);
prev = BLANK;
}
}
if (c != ' ') {
if (c != '\t') {
putchar(c);
prev = NOTBLANK;
}
}
}
}