将char数组从左向右移动
问题描述:
嗨,大家好,我试图编写一个可以从左到右移动的笑脸。我设法编写了笑脸并打印出来。但我没有把它编码,所以它可以从左到右移动。将char数组从左向右移动
这里是我的代码直到现在:
#include <stdio.h>
#include <stdlib.h>
int charprint(char x[][8], int X, int Y)
{
for (int i = 0 ; i<X ; i++)
{
for (int j = 0; j<Y; j++)
{
if(x[i][j]== '1')
{
printf(" ");
}
else
{
printf("%c", 219);
}
}
printf("\n");
}
}
int main()
{
char bitmap [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'},
};
charprint(bitmap, 8, 8);
return 0;
}
答
你必须要考虑“移动和移动后填补空白”和“环绕运动”之间的区别。
for each line:
temp = wrap ? (moveleft() ? line[0] : line[7]) : '1'
memmove(line + moveleft() ? 0 : 1, line + moveleft() ? 1 : 0, 7)
line[moveleft() ? 7 : 0] = temp
的memmove()每行不是添加你必须移动在每行 –
这样做的主要问题将是移动显卡真的不顺利与控制台输出在一起的一个字符。您需要使用一些操作系统特定的库才能使图形部件正常工作。 – Lundin
你必须做一些“终端魔术”来让它看起来不错=>转义序列在打印后清除屏幕,并使用sleep()延迟一些毫秒。 –