关于复制输入输出,将连续空格用一个空格代替的有关问题

关于复制输入输出,将连续空格用一个空格代替的问题
在c程序设计语言 习题解答 那本书第六页的练习1-9, 要求 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。
代码

#include<stdio.h>

#define NONBLANK 'a'
main(){
int c, lastc;

lastc = NONBLANK;
while((c = getchar()) != EOF){
if (c != ' '){
putchar (c);
}
if (c == ' ')
if (lastc != ' ')
putchar(c);
lastc = c;
}
}

编译成功 ,但是不懂为什么会有这样的效果  主要是
 

#define NONBLANK 'a'
lastc = NONBLANK;
符号NONBLANK负责把变量lastc初始化为一个任意的非空格字符, 不是很懂这个意思,希望大家指点指点关于复制输入输出,将连续空格用一个空格代替的有关问题

------解决方案--------------------

#include<stdio.h>
 
#define NONBLANK 'a'   //可以随便定义一个不是空格的字符
main(){
    int c, lastc;
     
    lastc = NONBLANK;
    while((c = getchar()) != EOF){
        if (c != ' '){
            putchar (c);
        }
        if (c == ' ')
            if (lastc != ' ')  //当读入第一个空格时‘a’!=' ',来确保输出一个空格
                putchar(c);
        lastc = c;  
    }
}

------解决方案--------------------
lastc为标记上一个字符是否为空。每次碰到新的空格的时候,都要判断上一次的字符,即lastc是不是也为空字符。因此,当第一次碰到空格的时候,之前lastc肯定不是空格,故将lastc初始化为一个非空字符。