编程实现汉字点阵显示,只能够显示一个汉字,怎么修改代码做到显示三个汉字?

代码如下


#include "stdio.h"
#include "string.h"
#include "stdlib.h"

const int reglen = 94;       //每区(行)有 94 位(列)
const int font_width  = 48;  // 单字点阵宽度(列数)
const int font_height = 48;  // 单字点阵高度(行数)
const int dotsize = 16 * 16/8;   //一个汉字点阵所占的字节数
const int subcode = 0xa0;      //内码与区、位码的差值

char *font_file_name = "chs16.fon"; // 点阵字库文件名
char str[] = "计";    //要显示点阵信息的汉字
char bindot[16 * 16/8] = {0};   //存储点阵信息的数组

void printcharbindot(char* bindot, int dotlen);
int main(int argc, char* argv[])
{
    FILE *fp = fopen(font_file_name, "rb");
    int string_size = font_width * font_height;


    int i=0,j=0;
       int offset=0;
    unsigned char regcode;  //区码
    unsigned char bitcode;  //位码 

    // 计算区位码,
    regcode = (unsigned char)str[i]-subcode;
    bitcode = (unsigned char)str[i+1]-subcode;
// 
//    再计算汉字在字库中的位置,进而得出此字符点阵在字体文件中的偏移

    offset=((regcode-1)*reglen+bitcode-1)*dotsize;
    
    // 在字库文件中读取其点阵数据
    fseek(fp, offset, SEEK_SET);
    fread(bindot, sizeof(bindot),1, fp);
    
    //输出其点阵信息
    printcharbindot(bindot, dotsize);
    
    fclose(fp);
    system("pause");
    return 0;
}

//按顺序输出点阵的每一位信息
void printcharbindot(char* bindot, int len)
{
    int charnum = 0;  //当前字节号
    int bitnum  = 0;  //已读取的位数
    int bitindex =0;  //当前位号
    int bitvalue;     //当前位的值
    for (charnum =0; charnum < len; ++charnum)
    {
        //从高到低顺次输出一个字节的每位信息
        for(bitindex = 7;bitindex>=0; --bitindex)
        {
            //输出当前字节第bitindex位的值
            bitvalue  = ((bindot[charnum]>>bitindex) & 0x1 );  
            printf("%c", bitvalue+'0');

            //满12位输出一行
            if ((++bitnum %16) == 0)
                printf("\n");
        }
    }
}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。