On Mon, 20 Jun 2016 16:37:08 +0200, Edward Bartolo wrote:
[...]
> "The C programming language" (Kernighan & Ritchie)
[...]
> On page Page 34 Exercise 1-9
> "Write a program to copy its input to its output, replacing each
> string of blanks one ore more blanks by a single blank."
> 
> I wrote the following, tested it, and it seems to work, but I think it is
> too complicated. Any suggestions?
> 
> --------------------------
> #include <stdio.h>
> 
> int main()
> {
>   int c, d = 0;
>   while ((c = getchar()) != EOF) {
>     if (c != ' ') {
>       d = 0;
>       putchar(c);
>     }
>     if (c == ' ' && d == 0) {
>       putchar(c);
>       d = 1;
>     }
>   }
> 
>   return 0;
> }
> ----------------------------
Good job so far! Note to other readers: The 'else' keyword has 
not been covered at this point in the book. So the solution 
looks a bit suboptimal, but is correct nonetheless.
However, since the '&&' operator has not been covered as well, 
the second if-block would read something like that in a 
straight-forward true-to-the-letter solution:
     if (c == ' ') { 
       if (d == 0) {
         putchar(c);
         d = 1;
       }
     }
One more hint: There exists a web page listing possible solutions 
to the exercises in K&R2, peer reviewed by designated expert C 
programmers: 
  
http://clc-wiki.net/wiki/K%26R2_solutions
HTH, Regards
Urban