火灾模拟程序不知道如何初始化它

时间:2013-03-18 18:09:32

标签: c++

程序应该输出一个12x24的矩阵,它以0为边界,中间有1,在(1,1)位置有2我不知道在哪个部分初始化M [row] [COL] = 2;因为无论我把它放在哪里,它都不会输出2到第一个位置,有什么建议吗?

int main()
{
    int M[N/2][N];
    int ROWS, COLS, row, col;
    int r, c;
    ROWS = sizeof(M) / sizeof(M[0]);
    COLS = sizeof(M[0]) / sizeof(M[0][0]);
    fill(M, ROWS, COLS, 1, 1);
    row=1;
    col=1;
    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        { 
            if (r==0||r ==ROWS-1)
            {
                M[ROWS][COLS]=0;
            }
            else if(c==0||c==COLS-1)
            {
                M[ROWS][COLS]=0;
            }
            else {
                M[ROWS][COLS]=1;    
            }

            cout<< M[ROWS][COLS];
        }

        cout << endl;

    }

    print(M, ROWS, COLS);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

我注意到你在ROWS循环中使用COLSfor作为数组索引...你 可能意味着使用循环变量rc

此外,对于常规变量使用大写名称被认为是不好的形式... C中的约定是仅对宏使用大写标识符。

答案 1 :(得分:0)

如果你写M [1] [1] = 2,我敢打赌;在行cout&lt;&lt; M [ROWS] [COLS]之前,您将看到所需的输出。这样做是很愚蠢的,因为那时你会将那个单一位置(M [1] [1])重复分配给相同的值 - 确切地说,288次 - 但你不能为M打印错误的值[1] [1]如果您在每次打印时将其设置为正确的值。当然,还有更好的方法。

将干净地分离程序执行的操作会更好。它必须做两件事:

  1. 初始化阵列。
  2. 打印阵列的内容。
  3. 这些动作中的每一个都应该由不同的功能执行。也就是说,一次调用一个函数来初始化整个数组,然后再调用另一个函数一次来打印整个数组。这样,在打印任何单元格之前,数组中的每个单元格都将设置为正确的值。

    如果你这样做,你应该很容易在你的代码中找到一个好地方来设置M [1] [1] = 2,以便你看到正确的打印输出。

    我假设这是一个练习,稍后将扩展为使用数组做更多的事情,因此首先使用数组是有意义的。如果是这样,你很有可能在某个时候再次打印数组,然后你会很高兴你编写了一个打印数组的函数而没有其他任何东西