带有printf和段的多维数组的7段显示

时间:2011-10-17 14:24:05

标签: c ascii-art

在K.N Kings“C编程:现代方法”,第10章练习7中,任务是在ASCII艺术中将数字转换器从正常数字转换为7段数字,如下所示:

   _   _        _   _   _   _   _   _ 
|  _|  _|  |_| |_  |_    | |_| |_| | |
| |_   _|    |  _| |_|   | |_|   | |_|

我得到了每个数字的序列,可以打开和关闭它

样品:

int digit_sequence[10][7] = {
    // A,B,C,D,E,F,G
    /* 0 */ {1,1,1,1,1,1,0}

}

其中1 = ON,0 = OFF

但我很难让process_digit(int digit, int position)功能正常工作。

我很难将sequence[10][7]转换为digits[4][MAX_DIGITS*4]

善良的灵魂能帮帮我吗?

我一直在阅读高尔夫代码七段挑战,但即使我理解这个理论,仍然很难说服我的大脑用多个阵列做我想做的事。


忽略ASCII艺术,问题是:

  

编写一个程序,提示用户输入一个数字,然后使用字符显示数字,以模拟七段显示的效果。

     

...

     

应忽略数字以​​外的字符。编写程序,使最大位数由名为MAX_DIGITS的宏控制,其值为10.如果该数字包含的位数超过此数字,则忽略额外的数字。 提示:使用两个外部数组。一个是segments数组[...],它存储表示数字和段之间的对应关系的数据。另一个数组digits将是一个包含4行的字符数组(因为每个分段数字高4个字符)和MAX_DIGITS * 4列(数字宽度为3个字符,但数字之间需要空格可读性)。将您的程序编写为四个函数:main,[...]

void clear_digits_array(void);
void process_figit(int digit, int position);
void print_digits_array(void);
     

clear_digits_array会将空白字符存储到数字数组的所有元素中。 process_digit会将digit的七段表示存储到digits数组中的指定位置(位置范围从0MAX_DIGITS - 1)。 print_digits_array将显示数字数组的行,每行都在一行[...]上。

1 个答案:

答案 0 :(得分:1)

诀窍是映射片段的显示位置。

每个细分受众群的行号相同。

0:  _   _
1: |_| |_| ...
2: |_| |_|
3:     

但是,列的变化​​范围为position。每个位置是一个4个字符宽度的“迷你矩阵”(3个用于段,1个用于空间:'|_| ')。因此,我们修复了分段线,并将其“迷你矩阵”上的列与(位置* 4)相加。

0123 4567 89AB
 _    _    _
|_|  |_|  |_|   ...
|_|  |_|  |_|
pos0 pos1 pos2

知道了吗?代码将是这样的:

void process_digit(int digit, int position){
    int i;
    for(i=0;i<7;i++){
        if(segments[digit][i]==1) /* Has digit the i segment? */
            switch(i){
                case 0: digits[0][1+position*4]='_';break;
                case 1: digits[1][2+position*4]='|';break;
                case 2: digits[2][2+position*4]='|';break;
                case 3: digits[2][1+position*4]='_';break;
                case 4: digits[2][0+position*4]='|';break;
                case 5: digits[1][0+position*4]='|';break;
                case 6: digits[1][1+position*4]='_';break;
            }
    }
}

(您可以选择' - '和'_',或者可能更改某些行)

希望它有所帮助。