程序写完了,必须要验证,这是重要的方法论。因为如果不验证,则不会知道程序写的对还是不对。学过人工智能或者控制论都知道,反馈非常重要,反馈形成闭环,可以用来指导、调节你的输出。而对于编程这个活动来说,验证也一样是产出的反馈,形成闭环,过程中测出的所有BUG都会反馈过来,产生调整代码的输出。
一句话,闭环靠谱,开路不靠谱。
我们生成了生成字库的程序之后,按理也应该验证。C语言的程序,没有main函数,自然也需要另外一个C语言带main函数的调用来验证了。我们这里就把选取使用字的文本根据给出的裁剪字库打印出来即可。用终端模拟一样可以有挺好的效果,没必要控制显示器。
我们写的C语言文件如下,给出了汉字(16X16)的打印,以及ASCII字符(16X8)的打印。
#include <stdio.h>
/* http://www.cnblogs.com/Colin-Cai */
//打印汉字
void print_chinese(const unsigned char *buf)
{
int i,j,k;
unsigned char c;
for(i=0;i<16;i++) {
for(j=0;j<2;j++) {
for(k=7;k>=0;k--) {
c = (unsigned char)0X1 << k;
if(*buf & c)
printf("*");
else
printf(" ");
}
buf++;
}
printf("\n");
}
printf("\n\n\n");
}
//打印ASCII字符
void print_ascii(const unsigned char *buf)
{
int i,j,k;
unsigned char c;
for(i=0;i<16;i++) {
for(j=0;j<1;j++) {
for(k=7;k>=0;k--) {
c = (unsigned char)0X1 << k;
if(*buf & c)
printf("*");
else
printf(" ");
}
buf++;
}
printf("\n");
}
printf("\n\n\n");
}
/* 裁剪中提供的两个查找函数 */
const unsigned char *find_ascii_font(unsigned char c);
const unsigned char *find_chinese_font(unsigned char GBH, unsigned char GBL);
int main(int argc, char*argv)
{
unsigned char c, c2;
const unsigned char* p;
while(1) {
if(fread(&c, 1, 1, stdin)!=1)
return 0;
if(c<0X80) { /* 就以此判断是ASCII字符了 */
p = find_ascii_font(c);
if(p != NULL) {
print_ascii(p);
}
continue;
}
if(fread(&c2, 1, 1, stdin)!=1)
return 0;
/* 打印汉字 */
p = find_chinese_font(c,c2);
if(p != NULL) {
print_chinese(p);
}
}
return 0;
}
测试一下效果