我正在尝试编写一个程序,该程序应该向左滑动。我开发了以下代码,但是当我运行它时,它会打印出一个非常错误的代码。
void shiftMap (char sourceBitmap [8][8] , char destinationbitmap [8][8])
{
for (int i = 0 ; i<8 ; i++)
{
for (int j = 0 ; j<8 ; j++)
{
destinationbitmap [i][j] = sourceBitmap[i][j];
}
}
for (int i = 0 ; i<8 ; i++)
{
for (int j = 0; j<8 ; j++ )
{
if( destinationbitmap[i][j] == '1')
{
printf(" ");
}
else
{
printf("%c", 'X');
}
}
printf("\n");
}
}
int main()
{
char bitmap1 [8][8] =
{
{'1', 'X', 'X', '1', '1', 'X', 'X','1'},
{'1', 'X', 'X', '1', '1', 'X', 'X','1'},
{'1', '1', '1', '1', '1', '1', '1','1'},
{'X', '1', '1', '1', '1', '1', '1','X'},
{'1', 'X', '1', '1', '1', '1', 'X','1'},
{'1', '1', 'X', 'X', 'X', 'X', '1','1'},
{'1', '1', '1', '1', '1', '1', '1','1'},
{'1', '1', '1', '1', '1', '1', '1','1'},
};
char bitmap2 [8][8] =
{
{'1', 'X', 'X', '1', '1', 'X', 'X','1'},
{'1', 'X', 'X', '1', '1', 'X', 'X','1'},
{'1', '1', '1', '1', '1', '1', '1','1'},
{'X', '1', '1', '1', '1', '1', '1','X'},
{'1', 'X', '1', '1', '1', '1', 'X','1'},
{'1', '1', 'X', 'X', 'X', 'X', '1','1'},
{'1', '1', '1', '1', '1', '1', '1','1'},
{'1', '1', '1', '1', '1', '1', '1','1'},
};
while (1)
{
Sleep(1000);
system("cls");
shiftMap(bitmap1,bitmap2);
}
}
我仍然是编程新手。
答案 0 :(得分:0)
乍一看,你的shiftMap功能似乎没有做任何事情,因为你的源和目的地是同一个地图,你将目的地[i] [j]分配给源[i] [j]。我不知道这是不是你想要的,但是因为你说你想让它向左滑动,我认为你应该把它改成j-1或其他东西。
答案 1 :(得分:0)
继续发表评论,没有任何事情发生,因为bitmap1
和bitmap2
是相同的。此外,在shiftmap
中,您使用bitmap2
覆盖bitmap1
,并销毁可能存在的任何差异。另一个挑战是,唯一可能发生的转变是,在摧毁你的笑脸之前,将行位移的位图最多1
,最多2
次。
鉴于设置,让笑脸上下移动&#34; 的最简单方法是修改bitmap2
将笑脸降低({{ 1}}或1
行)然后只需在2
和bitmap1
的打印之间切换。例如,您可以通过以下方式完成此任务:
bitmap2
(这只会导致笑脸每次迭代上下两行反弹)
此外,虽然不是错误,但C的标准编码样式避免使用#include <stdio.h>
#include <unistd.h>
void prnmap (char (*bitmap)[8])
{
int i, j;
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++)
if (bitmap[i][j] == '1')
putchar (' ');
else
putchar ('X');
putchar ('\n');
}
}
int main (void) {
char bitmap1[][8] = {
{'1', 'X', 'X', '1', '1', 'X', 'X', '1'},
{'1', 'X', 'X', '1', '1', 'X', 'X', '1'},
{'1', '1', '1', '1', '1', '1', '1', '1'},
{'X', '1', '1', '1', '1', '1', '1', 'X'},
{'1', 'X', '1', '1', '1', '1', 'X', '1'},
{'1', '1', 'X', 'X', 'X', 'X', '1', '1'},
{'1', '1', '1', '1', '1', '1', '1', '1'},
{'1', '1', '1', '1', '1', '1', '1', '1'},
};
char bitmap2[][8] = {
{'1', '1', '1', '1', '1', '1', '1', '1'},
{'1', '1', '1', '1', '1', '1', '1', '1'},
{'1', 'X', 'X', '1', '1', 'X', 'X', '1'},
{'1', 'X', 'X', '1', '1', 'X', 'X', '1'},
{'1', '1', '1', '1', '1', '1', '1', '1'},
{'X', '1', '1', '1', '1', '1', '1', 'X'},
{'1', 'X', '1', '1', '1', '1', 'X', '1'},
{'1', '1', 'X', 'X', 'X', 'X', '1', '1'},
};
int toggle = 0, n = 5;
while (n--) { /* do 5 iterations */
if (toggle & 1) /* if odd, bitmap1 */
prnmap (bitmap1);
else /* even, bitmap2 */
prnmap (bitmap2);
toggle ^= 1; /* toggle 0,1,0,.. */
sleep (1);
}
return 0;
}
变量来支持所有小写。参见例如NASA - C Style Guide, 1994将caMelCase
留给C ++。
此外,正如评论中所述,永远不需要致电camelCase
来打印单字符。 printf
是一个复杂的可变参数函数,用于打印格式化的字符串。 printf
(或putchar
)是简单的函数,只需打印单字符即可。
查看代码,查看输出并告诉我这是否是您要完成的任务。如果没有,我们可以使用另一种实际上在位图内移动值的算法。