这是一道基本练习题,就是有一点麻烦。
#include <stdio.h>
#include <string.h>
char s[20];
struct node
{
bool part1;
bool part2;
bool part3;
bool part4;
bool part5;
bool part6;
bool part7;
};
struct node format[10];
void init()
{
format[0].part1 = true;
format[0].part2 = true;
format[0].part3 = true;
format[0].part4 = false;
format[0].part5 = true;
format[0].part6 = true;
format[0].part7 = true;
format[1].part1 = false;
format[1].part2 = false;
format[1].part3 = true;
format[1].part4 = false;
format[1].part5 = false;
format[1].part6 = true;
format[1].part7 = false;
format[2].part1 = true;
format[2].part2 = false;
format[2].part3 = true;
format[2].part4 = true;
format[2].part5 = true;
format[2].part6 = false;
format[2].part7 = true;
format[3].part1 = true;
format[3].part2 = false;
format[3].part3 = true;
format[3].part4 = true;
format[3].part5 = false;
format[3].part6 = true;
format[3].part7 = true;
format[4].part1 = false;
format[4].part2 = true;
format[4].part3 = true;
format[4].part4 = true;
format[4].part5 = false;
format[4].part6 = true;
format[4].part7 = false;
format[5].part1 = true;
format[5].part2 = true;
format[5].part3 = false;
format[5].part4 = true;
format[5].part5 = false;
format[5].part6 = true;
format[5].part7 = true;
format[6].part1 = true;
format[6].part2 = true;
format[6].part3 = false;
format[6].part4 = true;
format[6].part5 = true;
format[6].part6 = true;
format[6].part7 = true;
format[7].part1 = true;
format[7].part2 = false;
format[7].part3 = true;
format[7].part4 = false;
format[7].part5 = false;
format[7].part6 = true;
format[7].part7 = false;
format[8].part1 = true;
format[8].part2 = true;
format[8].part3 = true;
format[8].part4 = true;
format[8].part5 = true;
format[8].part6 = true;
format[8].part7 = true;
format[9].part1 = true;
format[9].part2 = true;
format[9].part3 = true;
format[9].part4 = true;
format[9].part5 = false;
format[9].part6 = true;
format[9].part7 = true;
}
void func(int n, char *s) //n是大小
{
int i, j, k;
int num;
int len;
len = strlen(s);
for(i=0; i<len; i++) //画最上面的部分
{
num = s[i]-'0';
if(format[num].part1)
{
printf(" ");
for(j=1; j<=n; j++)
printf("-");
printf(" ");
if(i < len-1)
printf(" ");
}
else
{
printf(" ");
for(j=1; j<=n; j++)
printf(" ");
printf(" ");
if(i < len-1)
printf(" ");
}
}
printf("\n");
for(k=1; k<=n; k++)
{
for(i=0; i<len; i++) //画第二部分和第三部分
{
num = s[i]-'0';
if(format[num].part2)
printf("|");
else
printf(" ");
for(j=1; j<=n; j++)
printf(" ");
if(format[num].part3)
printf("|");
else
printf(" ");
if(i < len-1)
printf(" ");
}
printf("\n");
}
for(i=0; i<len; i++) //画中间部分
{
num = s[i]-'0';
if(format[num].part4)
{
printf(" ");
for(j=1; j<=n; j++)
printf("-");
printf(" ");
if(i < len-1)
printf(" ");
}
else
{
printf(" ");
for(j=1; j<=n; j++)
printf(" ");
printf(" ");
if(i < len-1)
printf(" ");
}
}
printf("\n");
for(k=1; k<=n; k++)
{
for(i=0; i<len; i++) //画第五部分和第六部分
{
num = s[i]-'0';
if(format[num].part5)
printf("|");
else
printf(" ");
for(j=1; j<=n; j++)
printf(" ");
if(format[num].part6)
printf("|");
else
printf(" ");
if(i < len-1)
printf(" ");
}
printf("\n");
}
for(i=0; i<len; i++) //画最底下部分
{
num = s[i]-'0';
if(format[num].part7)
{
printf(" ");
for(j=1; j<=n; j++)
printf("-");
printf(" ");
if(i < len-1)
printf(" ");
}
else
{
printf(" ");
for(j=1; j<=n; j++)
printf(" ");
printf(" ");
if(i < len-1)
printf(" ");
}
}
printf("\n");
printf("\n");
}
int main(void)
{
int n;
init();
while(1)
{
scanf("%d %s", &n, s);
if(n==0 && !strcmp(s,"0"))
break;
func(n, s);
}
return 0;
}