C语言两个程序 讨论解决办法

C语言两个程序 讨论
复制到输出时,多个空格只输出一个空格的两个程序,大家讨论下哪个更好点,执行效率更快些,为什么?
程序一:
#include<stdio.h>
#define YES 1
#define NO 0
int main()
{
int c;
int flag = YES;
while((c=getchar()) != EOF)
{
if(c==' ' && flag)
{
putchar(c);
flag = NO;
}
else if(c != ' ')
{
putchar(c);
flag = YES;
}
}
return 0;
}
/*************************************************************************/

程序二:
#include<stdio.h>
#define NONBLANK 'a'
int main()
{
int c;
int state = NONBLANK;
while((c=getchar(c)) != EOF)
{
if(c != ' ') //不是空格时
putchar(c);
if(c==' ') //是空格时
if(state != ' ')
putchar(c);
state = c;
}
return 0;
}

------解决方案--------------------
第二个吧。逻辑上就少了几个步骤。
可以用时间测一下。。
clock_t start,end,time;
start=clock();
//要测试的内容
end=clock();
time=end-start;
printf("run time is %ldsec \n",step,time);
getchar();


------解决方案--------------------
程序二是不是有问题啊

C/C++ code

程序二:
#include<stdio.h>
#define NONBLANK 'a'
int main()
{
int c;
int state = NONBLANK;
while((c=getchar(c)) != EOF)
{
if(c != ' ') //不是空格时
{
    putchar(c);
    state = NONBLANK;
}
if(c==' ') //是空格时
    if(state != ' ')
        putchar(c);
state = c;
}
return 0;
}