我正在研究"2048"游戏项目。
显示矩阵时,有零,如下图所示:
我想摆脱表格中的零,只显示非零的整数。 所以我将以下代码添加到我现有的" PrintMat"功能:
void PrintMat(int a[4][4])
{
int b[4][4];
int i, j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (a[i][j] == 0)
{
b[i][j] = ' ';
}
else
{
b[i][j] = a[i][j];
}
}
}
printf("+--------------+--------------+--------------+--------------+\n");
printf("| | | | |\n");
printf("| %5d | %5d | %5d | %5d |\n", b[0][0], b[0][1], b[0][2], b[0][3]);
printf("| | | | |\n");
printf("+--------------+--------------+--------------+--------------+\n");
printf("| | | | |\n");
printf("| %5d | %5d | %5d | %5d |\n", b[1][0], b[1][1], b[1][2], b[1][3]);
printf("| | | | |\n");
printf("+--------------+--------------+--------------+--------------+\n");
printf("| | | | |\n");
printf("| %5d | %5d | %5d | %5d |\n", b[2][0], b[2][1], b[2][2], b[2][3]);
printf("| | | | |\n");
printf("+--------------+--------------+--------------+--------------+\n");
printf("| | | | |\n");
printf("| %5d | %5d | %5d | %5d |\n", b[3][0], b[3][1], b[3][2], b[3][3]);
printf("| | | | |\n");
printf("+--------------+--------------+--------------+--------------+\n");
}
输出如下图所示:
我知道它有什么问题(我使用int类型来显示字符)。问题是:我该如何解决?我怎样才能摆脱零?
感谢您的时间!
答案 0 :(得分:2)
使用%d说明符无法打印空格。如果数组包含一个带有空格值的整数,则必须使用%c说明符和if语句。
您的printf语句必须拆分为较短的语句。每个数组元素一个,并将它们放入for循环中。
答案 1 :(得分:1)
由于您只需要处理一组有限的可能数字,我会欺骗并使用查找表。
#include <stdio.h>
const char *Fmt(short a)
{
static const char *powers[] = {
" ",
" 2 ",
" 4 ",
" 8 ",
" 16 ",
" 32 ",
" 64 ",
" 128 ",
" 256 ",
" 512 ",
"1024 ",
"2048 ",
"4068 ",
"8192 ",
"16384",
"32768",
};
return powers[a];
}
void PrintMat(short a[4][4])
{
for (int i = 0; i < 4; i++) {
printf("+--------------+--------------+--------------+--------------+\n");
printf("| | | | |\n");
printf("| %5s | %5s | %5s | %5s |\n", Fmt(a[i][0]), Fmt(a[i][1]), Fmt(a[i][2]), Fmt(a[i][3]));
printf("| | | | |\n");
}
printf( "+--------------+--------------+--------------+--------------+\n");
}
int main() {
static short a[][4] = {
{ 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9,10,11 },
{12,13,14,15 }
};
PrintMat(a);
}