[英]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 允許縮放
# 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);
}
結果:
##### # ##### #####
# # # # #
# # # ##### #####
# # # # # #
##### # ##### #####
########## ## ########## ##########
########## ## ########## ##########
## ## ## ## ##
## ## ## ## ##
## ## ## ########## ##########
## ## ## ########## ##########
## ## ## ## ## ##
## ## ## ## ## ##
########## ## ########## ##########
########## ## ########## ##########
############### ### ############### ###############
############### ### ############### ###############
############### ### ############### ###############
### ### ### ### ###
### ### ### ### ###
### ### ### ### ###
### ### ### ############### ###############
### ### ### ############### ###############
### ### ### ############### ###############
### ### ### ### ### ###
### ### ### ### ### ###
### ### ### ### ### ###
############### ### ############### ###############
############### ### ############### ###############
############### ### ############### ###############
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
###### ###### ###### ###### ######
###### ###### ###### ###### ######
###### ###### ###### ###### ######
###### ###### ###### ###### ######
###### ###### ###### ###### ######
###### ###### ###### ###### ######
###### ###### ###### ############################## ##############################
###### ###### ###### ############################## ##############################
###### ###### ###### ############################## ##############################
###### ###### ###### ############################## ##############################
###### ###### ###### ############################## ##############################
###### ###### ###### ############################## ##############################
###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ######
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
############################## ###### ############################## ##############################
添加一些參數檢查:如果字符串只包含數字,如果比例大於 0 等等。
在此代碼中,字符寬度不必是恆定的。 您可以創建非固定寬度 fonts 就像在這個例子中(看數字1
)
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.