我正在尝试创建(10x10)二维字符数组以存储''和'T'并像这样显示它

+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+


我写的函数:

  int plant_forest(char forest[][SIZE])
{
    int i,j;
    forest[0][0] = ' ';
    for(i = 0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            if(forest[i][j]!= forest[0][0])
            {
                if(forest[i][j-1]!='T' && forest[i-1][j]!= 'T')
                {
                    forest[i][j] = 'T';
                }
                else
                {
                    forest[i][j] = ' ';
                }

            }
        }
    }
    return 0;
}


我得到的结果略有不同。

+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
| | |T| |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
|T| | |T| |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
| |T| | |T| |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
|T| |T| | |T| |T| |T|
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| | |T| |T| |
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| | |T| |T|
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| | |T| |
+-+-+-+-+-+-+-+-+-+-+
|T| |T| |T| |T| | |T|
+-+-+-+-+-+-+-+-+-+-+
| |T| |T| |T| |T| | |
+-+-+-+-+-+-+-+-+-+-+


我检查了逻辑,没有发现任何错误。除了i-1和j-1可能为负数。但是这将如何影响执行力?

仅供参考,我将在此处包括打印功能。但我已经检查过并确保此功能没有错误

void printBoard(char forest[][SIZE])
{
    int i,j;

        printf("+-+-+-+-+-+-+-+-+-+-+\n");
        for(i = 0; i<SIZE;i++)
        {
            for(j = 0;j<SIZE;j++)
            {
                printf("|%c",forest[i][j]);
            }
            printf("|\n");
            printf("+-+-+-+-+-+-+-+-+-+-+\n");

        }

}

最佳答案

我认为这可能与数组中数据的存储方式有关。在内存中,数据仅存储在sequentially中。由于negative array indexes are allowed in C在您的情况下,功能结果是forest [1] [-1]指向位于单元forest [0] [9]中的相同数据,您会注意到它是“ T”。

由于forest [0] [9](又名forest [1] [-1])为“ T”,因此您未通过此测试

if(forest[i][j-1]!='T' && forest[i-1][j]!= 'T')


这意味着在单元格林[1] [0]中注册了一个''。防止出现负索引值,您应该会很好。

关于c - 二维数组操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37823650/

10-13 02:34