使用while语句复制数组

时间:2016-06-11 18:55:24

标签: c arrays while-loop

我正在尝试编写一个程序,该程序应该向左滑动。我开发了以下代码,但是当我运行它时,它会打印出一个非常错误的代码。

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);
    }
}

我仍然是编程新手。

2 个答案:

答案 0 :(得分:0)

乍一看,你的shiftMap功能似乎没有做任何事情,因为你的源和目的地是同一个地图,你将目的地[i] [j]分配给源[i] [j]。我不知道这是不是你想要的,但是因为你说你想让它向左滑动,我认为你应该把它改成j-1或其他东西。

答案 1 :(得分:0)

继续发表评论,没有任何事情发生,因为bitmap1bitmap2是相同的。此外,在shiftmap中,您使用bitmap2覆盖bitmap1,并销毁可能存在的任何差异。另一个挑战是,唯一可能发生的转变是,在摧毁你的笑脸之前,将行位移的位图最多1,最多2次。

鉴于设置,让笑脸上下移动&#34; 的最简单方法是修改bitmap2将笑脸降低({{ 1}}或1行)然后只需在2bitmap1的打印之间切换。例如,您可以通过以下方式完成此任务:

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, 1994caMelCase留给C ++。

此外,正如评论中所述,永远不需要致电camelCase来打印单字符printf是一个复杂的可变参数函数,用于打印格式化的字符串。 printf(或putchar)是简单的函数,只需打印单字符即可。

查看代码,查看输出并告诉我这是否是您要完成的任务。如果没有,我们可以使用另一种实际上在位图内移动值的算法。