如何继续搜索我的阵列?

时间:2014-03-02 08:06:01

标签: c arrays

我正在制作一个“尖峰时刻”的版本,这是一个游戏,你想要移动汽车以允许特定的汽车通过。对于我的程序,如果用户输入...让我们说GR1(G代表哪辆车要移动,R代表方向(右),1代表有多少空间朝这个方向移动)那么汽车假设为1空间向右。我注意到,对于我的程序,它只会移动汽车的一部分。我认为发生的事情是我的循环没有通过我的整个数组。一旦找到汽车的第一部分,它就会移动它,然后直接回到循环中。我该如何移动整辆车?

以下是一个示例:

--------
|GG...Y|
|P..B.Y|
|PRRB.Y>
|P..B..|
|O...TT|
|O.FFF.|
--------

//输入GR1应该给我

--------
|.GG..Y|
|P..B.Y|
|PRRB.Y>
|P..B..|
|O...TT|
|O.FFF.|
--------

//而是给我这个

--------
|G.G..Y|
|P..B.Y|
|PRRB.Y>
|P..B..|
|O...TT|
|O.FFF.|
--------

//代码a和c是用户输入

 for(i=64; i>0; i--)
    {
            if(board[i] == a)// if user input is found checks board
            {
                a = i;
                tmp = board[a];
                board[a] = board[a+c];
        //printf("The value of the swapping position is %c\n", board[a+c]);
        if(board[a+c]!= '.' || board[a+c]=='|')
            {
            printf("Invalid move. exiting..\n");
            return 0;
            }
                board[a+c] = tmp;
                printf("the value of a is %c\n", a);
            }
}

1 个答案:

答案 0 :(得分:1)

正如您在输入G中给出的位置板[0]和板[1]正确?但是当你循环通过电路板时,你不会直到电路板[0],因为检查的条件是i> 0.因此,电路板[0]位置的G不移动。所以做出这个改变。

for(i=64; i>0; i--)

将for更改为

for(i=64; i>=0; i--)

请记住,数组索引从0到大小为1。所以检查大约64.是否是array_size-1 错误是陈述a = i

的原因
if(board[i] == a)// if user input is found checks board
    {
        a = i;

在获得第一个匹配G时执行。因为a = i改变了一个值,所以没有检测到G的其余部分,因为在得到第一个匹配的G之后它不再是a!='G',它是a = i。

使用其他变量并避免通过a = i更改a的值。在获得匹配的'G'后,在下一次迭代开始之前恢复a ='G'的值。