C语言中带printf和多维数组的7段显示

C语言中带printf和多维数组的7段显示,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,所以我的问题在于我相信我的数字功能。我认为,在1和0的每次迭代中,这些情况都没有正确地建立索引,因此,当我键入输入(如4)时,会得到错误的输出。我不确定这个案子 陈述是倒退的或者正在发生的事情,但本质上我认为它们是不正确的 //input is 1 2 3 4 5 6 7 8 9 0 //output should be _ _ _ _ _ _ _ _ // | _| _| |_| |_ |_

所以我的问题在于我相信我的数字功能。我认为,在1和0的每次迭代中,这些情况都没有正确地建立索引,因此,当我键入输入(如4)时,会得到错误的输出。我不确定这个案子 陈述是倒退的或者正在发生的事情,但本质上我认为它们是不正确的

//input is 1 2 3 4 5 6 7 8 9 0
//output should be        _   _        _   _   _   _   _   _
//                     |  _|  _|  |_| |_  |_    | |_| |_| | |
//                     | |_   _|    |  _| |_|   | |_|   | |_|
//output is              _    _        _   _    _  _    _   _
//                     | _|   _|  |_|  |_  |_   |  |_|  |_| ||
//                     | |_   _|  |    _|  |_|  |  |_|  _|  |_|
//
#包括
#定义最多10位数字
无效清除数字数组(无效);
无效处理位(整数位、整数位);
作废打印\数字\数组(作废);
字符位数[3][MAX_位数*4];
[7][7]][7][7][7]][7][7]][7]][7]][7][7][7]]]]]]][1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 0,0,0,0,1,1},};
无效清除\u数字\u数组(无效){
int j=0,i=0;

对于(i=0;i而言,问题是如果线段处于非活动状态(而不是不打印任何内容),您必须实际打印空白(
printf(“”);
),否则7段显示将显示混乱。下面是一个丑陋的代码:

#include <stdio.h>
#define MAX_DIGITS 10

const int array[MAX_DIGITS][7]={{1,1,1,0,1,1,1},{0,0,1,0,0,1,0},{1,0,1,1,1,0,1},{1,0,1,1,0,1,1},{0,1,1,1,0,1,0},{1,1,0,1,0,1,1},{1,1,0,1,1,1,1},{1,0,1,0,0,1,0},{1,1,1,1,1,1,1},{1,1,1,1,0,1,1},};

void print_number(int num)
{
    //First line
    if (array[num][0]) printf(" _ ");

    printf("\n");

    //Second line
    if (array[num][1])
        printf("|");
    else
        printf(" ");

    if (array[num][3])
        printf("_");
    else
        printf(" ");

    if (array[num][2]) printf("|");

    printf("\n");

    //Third line
    if (array[num][4])
        printf("|");
    else
        printf(" ");

    if (array[num][6])
        printf("_");
    else
        printf(" ");

    if (array[num][5]) printf("|");

    printf("\n");
}

int main(void) {
    int a=0;

    printf("Enter a number:");
    scanf("%d", &a);
    if (a>=0 && a <= 9){
        print_number(a);
    }
    return 0;
}
然后,您应该将换行符打印为单独的行,如下所示:

void print_digits_array(void){
    int a=0,b=0;
    for(a=0;a<3;a++){
        for(b=0;b<MAX_DIGITS*4;b++)
            printf("%c",digits[a][b]);
        printf("\n");
    }
}
void打印数字数组(void){
int a=0,b=0;

对于(a=0;a所以我是这样想的。@Mescarra您说我应该用空格而不是空字符清除数组是正确的。但是,这只解决了一半的问题。要使这项功能正常工作,当调用print函数时,需要两个\n值。一个在要应用的行之间,一个在列之间这是一个正确对齐字符所需的空间。以下是我最终能够正常工作的地方。如果有更好的方法,请分享,我很想知道

//
//输出应为_
//                     |  _|  _|  |_| |_  |_    | |_| |_| | |
//                     | |_   _|    |  _| |_|   | |_|   | |_|
#包括
#定义最多10位数字
无效清除数字数组(无效);
无效处理位(整数位、整数位);
作废打印\数字\数组(作废);
字符位数[3][MAX_位数*4];
[7][7]][7][7][7]][7][7]][7]][7]][7][7][7]]]]]]][1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 0,0,0,0,1,1},};
无效清除\u数字\u数组(无效){
int j=0,i=0;

对于(i=0;iOk,我编辑了上面的程序,以显示我得到的确切输出。我不确定如何实现您的想法,因为这些标记都存储在一个int数组中,并在末尾打印出来。一个简单的方法是使用空格而不是空字符初始化
数字
数组(
\0
)。我将编辑我的答案以向您演示如何操作。
void print_digits_array(void){
    int a=0,b=0;
    for(a=0;a<3;a++){
        for(b=0;b<MAX_DIGITS*4;b++)
            printf("%c",digits[a][b]);
        printf("\n");
    }
}