来源于《The C Programming Language》的一道习题(P13,PR1-9):
编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替
自己实现:
#include <stdio.h>
int main() {
int c, flag;
flag = 0; while((c = getchar()) != EOF) if(c == ' ' && flag == 0) { putchar(c); ++flag; } else if(c == ' ' && flag != 0) ++flag; else { flag = 0; putchar(c); }
return 0;
}
参考代码:
#include <stdio.h>
#define NONBLANK 'a'
int main() {
int c, lastc;
lastc = NONBLANK; while((c = getchar()) != EOF) { if(c != ' ') putchar(c); if(c == ' ') if(lastc != ' ') putchar(c); lastc = c; }
return 0;
}
比较两段代码,发现自己的代码还是嫩了些:
1. 对于flag变量,有点幻数的感觉(不知道这个比喻恰不恰当,哈哈),当别人在读代码时,不能一眼看出它的含义,而参考代码中
使用的宏NONBLANK就不存在这方面的问题。
2. 在程序主体结构中,对于判断条件的组织及if else语句的使用上,没有参考代码中的简洁和高效