2014-03-02 88 views
0

所以我想印出使用数组七段显示器用三个维度:打印出在C三维阵列

我偶然发现了这个帖子,解释一个七段显示器的阵列结构: http://cboard.cprogramming.com/c-programming/94140-seven-segment-display.html

这是我想要的东西打印出来:

char array[9][10][20] 

但我似乎无法弄清楚究竟如何打印出来。此外,我很难打印出七个数字中的一个(例如'5')?

我认为我将需要三个for循环,但我不知道如何实现第三个循环。我发现的任何例子都只有2d,这是我得到的,但最后一个维度让我感到困惑。

任何帮助将不胜感激!

回答

4

不要过时。这里有一个例子:

#include <stdio.h> 

char array[9][10][20] = 
    { 
      {" ### "," "," ### "," ### ","  "," ### "," ### "," ### "," ### "," ### "}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"  "," "," ### "," ### "," ### "," ### "," ### ","  "," ### "," ### "}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {" ### "," "," ### "," ### ","  "," ### "," ### ","  "," ### "," ### "}, 
    }; 

int main(void) { 
    int ii, jj, kk; 

    // printing '3': 

    for(ii = 0; ii<9; ii++) { 
    printf("%s\n", array[ii][3]); 
    } 
} 

输出:

### 
    # 
    # 
    # 
### 
    # 
    # 
    # 
### 

为什么这项工作?

首先,我们来看看用于创建段的数组。这是一个9x10x20的字符数组。

事实上,而最后的尺寸被设定为20,它完全由那些长度65+1用于终止'\0')字符串。要打印出一个单独的数字,您只需要打印属于该数字的字符串 - 上述示例对数字3执行的操作。

如果你想打印出一串较长的数字,它会变得复杂,因为你必须在每一行上循环每一位。这里是你将如何做到这一点的数量12345

#include <stdio.h> 
#include <string.h> 

char array[9][10][20] = 
    { 
      {" ### "," "," ### "," ### ","  "," ### "," ### "," ### "," ### "," ### "}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"  "," "," ### "," ### "," ### "," ### "," ### ","  "," ### "," ### "}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {" ### "," "," ### "," ### ","  "," ### "," ### ","  "," ### "," ### "}, 
    }; 

int main(void) { 
    int ii, jj, kk; 

    // printing '3': 

    for(ii = 0; ii<9; ii++) { 
    printf("%s\n", array[ii][3]); 
    } 
    // print '12345' 
    int numToPrint = 12345; 

    char numBuf[20]; 
    sprintf(numBuf, "%d", numToPrint); 

    for(ii=0; ii<9; ii++) { 
    for(jj=0; jj < strlen(numBuf); jj++) { 
     printf("%s ", array[ii][numBuf[jj]-'0']); 
    } 
    printf("\n"); 
    } 
} 

输出的第二部分:

 ### ###   ### 
    #  #  # # # #  
    #  #  # # # #  
    #  #  # # # #  
     ### ### ### ### 
    # #   #  #  # 
    # #   #  #  # 
    # #   #  #  # 
     ### ###   ### 

注意 - 我用sprintf函数把整数转换成字符串 - 然后我就可以通过查看字符串中的每个字符并减去'0'来查找每个对应的数字。在“真实”代码中,您当然会检查您是否超出了数组边界,并且您可能希望包含一个小数点的字符串和+-的符号,以使其更灵活一些 - 但我希望您能够得到从这个想法。

+0

这是超级有用,感谢您的答复! – DiscoverImagine

0

我不知道你想要什么,但这里是显示想要的号码的方法。

int numberToDisplay = 5; 

for (int i = 0; i < 9; i++) 
    fprintf(stdout, "%s\n", array[i][numberToDisplay]; 
0

在顶部级别,我们有:

array = 
     { 
          {" ### ","     "," ### "," ### ","     "," ### "," ### "," ### "," ### "," ### "}, 
          {"#   #","   #","    #","    #","#   #","#    ","#    ","    #","#   #","#   #"}, 
          {"#   #","   #","    #","    #","#   #","#    ","#    ","    #","#   #","#   #"}, 
          {"#   #","   #","    #","    #","#   #","#    ","#    ","    #","#   #","#   #"}, 
          {"     ","     "," ### "," ### "," ### "," ### "," ### ","     "," ### "," ### "}, 
          {"#   #","   #","#    ","    #","    #","    #","#   #","    #","#   #","    #"}, 
          {"#   #","   #","#    ","    #","    #","    #","#   #","    #","#   #","    #"}, 
          {"#   #","   #","#    ","    #","    #","    #","#   #","    #","#   #","    #"}, 
          {" ### ","     "," ### "," ### ","     "," ### "," ### ","     "," ### "," ### "},    
     }; 

该阵列具有9个元素,对应于SSD位ASCII技术的行。例如:

array[2] = 
    { 
     "#   #", /* 3rd row of digit '0' */ 
     "    #", /* 3rd row of digit '1' */ 
     "    #", /* 3rd row of digit '2' */ 
     "    #", /* 3rd row of digit '3' */ 
     "#   #", /* 3rd row of digit '4' */ 
     "#    ", /* 3rd row of digit '5' */ 
     "#    ", /* 3rd row of digit '6' */ 
     "    #", /* 3rd row of digit '7' */ 
     "#   #", /* 3rd row of digit '8' */ 
     "#   #", /* 3rd row of digit '9' */ 
    }; 

索引此数组将从中选择打印第三行的数字。因此,要打印多个数字,我们需要这样的:

char array[9][10][20] = 
    { 
      {" ### ","  "," ### "," ### ","  "," ### "," ### "," ### "," ### "," ### "}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"# #"," #"," #"," #","# #","# ","# "," #","# #","# #"}, 
      {"  ","  "," ### "," ### "," ### "," ### "," ### ","  "," ### "," ### "}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {"# #"," #","# "," #"," #"," #","# #"," #","# #"," #"}, 
      {" ### ","  "," ### "," ### ","  "," ### "," ### ","  "," ### "," ### "},  
    }; 

int main(void) { 
    int i, j; 
    char number[] = "345"; 
    for (i = 0; i < 9; i++) {       /* For each row...*/ 
     for (j = 0; number[j] != '\0'; j++) {   /* Print the nth row of each digit */ 
      printf("%s ", array[i][number[j] - '0']); 
     } 
     putchar('\n'); 
    } 
    return 0; 
}