[英]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.