簡體   English   中英

使用 c 在控制台中以較大尺寸打印給定數字

[英]Printing a given number in larger size in console using c

請幫忙我在下面的程序中哪里出錯了? 它沒有給出預期的 output。 我找到了一些解決這個問題的方法,但他們使用不同的邏輯。 我想知道以下邏輯有什么問題。 我按照這個邏輯做了一個空跑,我沒有發現任何問題。 我真的很困惑。

# include <stdio.h>
int main()
{
    char zero[5][5] = {
        "#####",
        "#   #",
        "#   #",
        "#   #",
        "#####"
    };
    char one[5][5] = {
        "    #",
        "    #",
        "    #",
        "    #",
        "    #"
    };
    char two[5][5] = {
        "#####",
        "    #",
        "#####",
        "#    ",
        "#####"
    };
    char three[5][5] = {
        "#####",
        "    #",
        "#####",
        "    #",
        "#####"
    };
    char four[5][5] = {
        "#   #",
        "#   #",
        "#####",
        "    #",
        "    #"
    };
    char five[5][5] = {
        "#####",
        "#    ",
        "#####",
        "    #",
        "#####"
    };
    char six[5][5] = {
        "#####",
        "#    ",
        "#####",
        "#   #",
        "#####"
    };
    char seven[5][5] = {
        "#####",
        "    #",
        "    #",
        "    #",
        "    #"
    };
    char eight[5][5] = {
        "#####",
        "#   #",
        "#####",
        "#   #",
        "#####"
    };
    char nine[5][5] = {
        "#####",
        "#   #",
        "#####",
        "    #",
        "#####"
    };

    char userInput[3] = "356";
    int n = 3,i,j;
    for(i=0;i<5;i++)
    {
        for(j=0;j<n;j++)
        {
            switch(userInput[j])
            {
                case '0':
                    printf("%s ",zero[i]);
                    break;
                case '1':
                    printf("%s ",one[i]);
                    break;
                case '2':
                    printf("%s ",two[i]);
                    break;
                case '3':
                    printf("%s ",three[i]);
                    break;
                case '4':
                    printf("%s ",four[i]);
                    break;
                case '5':
                    printf("%s ",five[i]);
                    break;
                case '6':
                    printf("%s ",six[i]);
                    break;
                case '7':
                    printf("%s ",seven[i]);
                    break;
                case '8':
                    printf("%s ",eight[i]);
                    break;
                case '9':
                    printf("%s ",nine[i]);
                    break;
            }
            
        }
        printf("\n");
        
    }
}

編輯:我接受了 John Bodes 的評論以形成答案。

# include <stdio.h>
int main()
{
    char zero[][6] = {
        "#####",
        "#   #",
        "#   #",
        "#   #",
        "#####"
    };
    char one[][6] = {
        "    #",
        "    #",
        "    #",
        "    #",
        "    #"
    };
    char two[][6] = {
        "#####",
        "    #",
        "#####",
        "#    ",
        "#####"
    };
    char three[][6] = {
        "#####",
        "    #",
        "#####",
        "    #",
        "#####"
    };
    char four[][6] = {
        "#   #",
        "#   #",
        "#####",
        "    #",
        "    #"
    };
    char five[][6] = {
        "#####",
        "#    ",
        "#####",
        "    #",
        "#####"
    };
    char six[][6] = {
        "#####",
        "#    ",
        "#####",
        "#   #",
        "#####"
    };
    char seven[][6] = {
        "#####",
        "    #",
        "    #",
        "    #",
        "    #"
    };
    char eight[][6] = {
        "#####",
        "#   #",
        "#####",
        "#   #",
        "#####"
    };
    char nine[][6] = {
        "#####",
        "#   #",
        "#####",
        "    #",
        "#####"
    };
    //found another spot that's dangerous
    char userInput[] = "356";
    int n = 3,i,j;
    for(i=0;i<5;i++)
    {
        for(j=0;j<n;j++)
        {
            switch(userInput[j])
            {
                case '0':
                    printf("%s ",zero[i]);
                    break;
                case '1':
                    printf("%s ",one[i]);
                    break;
                case '2':
                    printf("%s ",two[i]);
                    break;
                case '3':
                    printf("%s ",three[i]);
                    break;
                case '4':
                    printf("%s ",four[i]);
                    break;
                case '5':
                    printf("%s ",five[i]);
                    break;
                case '6':
                    printf("%s ",six[i]);
                    break;
                case '7':
                    printf("%s ",seven[i]);
                    break;
                case '8':
                    printf("%s ",eight[i]);
                    break;
                case '9':
                    printf("%s ",nine[i]);
                    break;
            }
            
        }
        printf("\n");
        
    }
}

在這里,您有一個 function 允許縮放

  1. IMO 最好存儲指針,因為您可能有不同的字符寬度。
  2. 將其存儲在一個多維數組中,因此不需要 switch 語句。
# include <stdio.h>

    char *numbers[10][5] = {{
        "#####",
        "#   #",
        "#   #",
        "#   #",
        "#####",
    },
    {
        "    #",
        "    #",
        "    #",
        "    #",
        "    #",
    }
    ,
    {
        "#####",
        "    #",
        "#####",
        "#    ",
        "#####"
    },
    {
        "#####",
        "    #",
        "#####",
        "    #",
        "#####"
    }
    ,{
        "#   #",
        "#   #",
        "#####",
        "    #",
        "    #"
    }
    ,{
        "#####",
        "#    ",
        "#####",
        "    #",
        "#####"
    },{
        "#####",
        "#    ",
        "#####",
        "#   #",
        "#####"
    },{
        "#####",
        "    #",
        "    #",
        "    #",
        "    #"
    },{
        "#####",
        "#   #",
        "#####",
        "#   #",
        "#####"
    },{
        "#####",
        "#   #",
        "#####",
        "    #",
        "#####"
    }};

void print(const char *str, int scale)
{
    const char *wrk;

    for(int row = 0; row < 5; row++)
    {
        for(int rowrep = 0; rowrep < scale; rowrep++)
        {
            wrk = str;
            while(*wrk)
            {
                char *digitrow = numbers[*wrk - '0'][row];
                while(*digitrow)
                {
                    for(int charrep = 0; charrep < scale; charrep++)
                    {
                        printf("%c", *digitrow);
                    }
                    digitrow++;
                }
                for(int charrep = 0; charrep < scale; charrep++) printf(" ");
                wrk++;
            }
            printf("\n");
        }
    }
}

int main(void)
{
    print("0136", 1);
    printf("\n");
    print("0136", 2);
    printf("\n");
    print("0136", 3);
    printf("\n");
    print("0136", 6);
}

結果:

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

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

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

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

https://godbolt.org/z/7exs7j

添加一些參數檢查:如果字符串只包含數字,如果比例大於 0 等等。

在此代碼中,字符寬度不必是恆定的。 您可以創建非固定寬度 fonts 就像在這個例子中(看數字1

https://godbolt.org/z/Tfv3EP

int main()
{
    char zero[5][6] = {
        "#####",
        "#   #",
        "#   #",
        "#   #",
        "#####"
    };
    char one[5][6] = {
        "    #",
        "    #",
        "    #",
        "    #",
        "    #"
    };
    char two[5][6] = {
        "#####",
        "    #",
        "#####",
        "#    ",
        "#####"
    };
    char three[5][6] = {
        "#####",
        "    #",
        "#####",
        "    #",
        "#####"
    };
    char four[5][6] = {
        "#   #",
        "#   #",
        "#####",
        "    #",
        "    #"
    };
    char five[5][6] = {
        "#####",
        "#    ",
        "#####",
        "    #",
        "#####"
    };
    char six[5][6] = {
        "#####",
        "#    ",
        "#####",
        "#   #",
        "#####"
    };
    char seven[5][6] = {
        "#####",
        "    #",
        "    #",
        "    #",
        "    #"
    };
    char eight[5][6] = {
        "#####",
        "#   #",
        "#####",
        "#   #",
        "#####"
    };
    char nine[5][6] = {
        "#####",
        "#   #",
        "#####",
        "    #",
        "#####"
    };

    char userInput[3] = "356";
    int n = 3,i,j;
    for(i=0;i<5;i++)
    {
        for(j=0;j<n;j++)
        {
            switch(userInput[j])
            {
                case '0':
                    printf("%s ",zero[i]);
                    break;
                case '1':
                    printf("%s ",one[i]);
                    break;
                case '2':
                    printf("%s ",two[i]);
                    break;
                case '3':
                    printf("%s ",three[i]);
                    break;
                case '4':
                    printf("%s ",four[i]);
                    break;
                case '5':
                    printf("%s ",five[i]);
                    break;
                case '6':
                    printf("%s ",six[i]);
                    break;
                case '7':
                    printf("%s ",seven[i]);
                    break;
                case '8':
                    printf("%s ",eight[i]);
                    break;
                case '9':
                    printf("%s ",nine[i]);
                    break;
            }
            
        }
        printf("\n");
        
    }
}

我對你的代碼幾乎沒有改變。 當您使用 %s 打印字符串時,它會搜索 '\0',因此您必須為 '\0' 保留一位空白。 我的意思是。 If your array size is 5. Then you can store 4 characters ,最后一個將用於存儲 \0。 由於您提供了所有 5 位字符,因此您的打印不會在每行的末尾找到 \0。

這是 output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM