shell编程/字库裁剪(3)——验证

  程序写完了,必须要验证,这是重要的方法论。因为如果不验证,则不会知道程序写的对还是不对。学过人工智能或者控制论都知道,反馈非常重要,反馈形成闭环,可以用来指导、调节你的输出。而对于编程这个活动来说,验证也一样是产出的反馈,形成闭环,过程中测出的所有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;
}

  测试一下效果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

Java虚拟机工作原理之JVM用到的3大计算机核心功能,重点是方法调用

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模...

20530
来自专栏Android开发经验

ExpandableStickyListHeadersListView遇到的一个问题

15140
来自专栏算法修养

PAT 1026

程序运行时间(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard ...

366110
来自专栏CSDN技术头条

十五条有用的Golang编程经验

本文作者在很短的时间内就从对Golang一无所知到开发出真正的产品。在学习Golang的过程中,他总结出十五条编程经验以分享给读者。以下是译文。 ? 像许多其他...

34180
来自专栏算法与数据结构

PTA 银行排队问题之单队列多窗口服务

假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾...

340100
来自专栏Crossin的编程教室

【Python 第33课】 处理文件中的数据

我们已经知道了如何读取和写入文件。有了这两个操作文件的方法,再加上对文件内容的处理,就能写一些小程序,解决不少日常的数据处理工作。 比如我现在拿到一份文档,里面...

34780
来自专栏精讲JAVA

Gof设计模式之七大设计原则(六)

前言 今天的设计原则重理论,举例子只能是文字形式,没法使用代码解释,希望大家可以多读几遍。真正体会到设计原则的好处。每一个设计原则,我都尽量用非...

226100
来自专栏iKcamp

翻译连载 | 第 10 章:异步的函数式(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 第 10 章:异步的函数式(上)...

22190
来自专栏Python爬虫与算法进阶

爬虫之全站爬取方法

其实这个很好理解。比如说知乎,一个大V有100W粉丝,从这个大V出发,抓取粉丝的粉丝,一直循环下去。(可能是个死循环)

44330
来自专栏ACM小冰成长之路

51Nod-1837-砝码称重

ACM模版 描述 ? 题解 根据题目中的样例解释,我们完全可以大胆的猜测,次数至多不超过两次,所以一共可能是 0、1、20、1、2 次,00 次很容易想就是 n...

23690

扫码关注云+社区

领取腾讯云代金券