初学者的C++生命游戏计划的麻烦

Gue*_*est 0 c++

背景:我是编程的初学者.这是我迄今为止在生命游戏的草稿中所拥有的:

#include <iostream>

using namespace std;

int main()
{

    //INTRODUCTION

    int arraySize;
    cout << "What is the length of your square-shaped grid? Enter an integer value greater than 0. Too big will cause problems.";
    cin >> arraySize;
    int original[arraySize][arraySize];

    //REQUESTS INPUT FOR ARRAY

    for (int n = 0; n < arraySize; n++)
    {
        for (int x = 0; x < arraySize; x++)
        {
            bool ValInput;
            cout << "\n" << n << "," << x << "...";
            cin >> ValInput;
            original[n][x] = ValInput;
        }
    }

    cout << "\n\n\n";

    //DISPLAYS ARRAY

    for (int row = 0; row < arraySize; row++)
    {
        for (int column = 0; column < arraySize; column++)
        {
            cout << original[row][column] << " ";
            if (column == arraySize - 1)
            {
                cout << "\n";
            }
        }
    }

    cout << "Next frame.\n\n";

    //FORMS NEXT FRAME WITH VALUES OF # OF LIVE NEIGHBORS

    int liveNeighbors = 0;

    for (int z = 0; z < arraySize; z++)
    {
        for (int h = 0; h < arraySize; h++)
        {
            liveNeighbors = 0;
            if (z - 1 > -1)
                liveNeighbors += original[z - 1][h];
            if (z + 1 < arraySize)
                liveNeighbors += original[z + 1][h];
            if (h - 1 > -1)
                liveNeighbors += original[z][h - 1];
            if (h + 1 < arraySize)
                liveNeighbors += original[z][h + 1];
            if (z - 1 > -1, h - 1 > -1)
                liveNeighbors += original[z - 1][h -1];
            if (z - 1 > -1, h + 1 < arraySize)
                liveNeighbors += original[z - 1][h + 1];
            if (z + 1 < arraySize, h - 1 > -1)
                liveNeighbors += original[z + 1][h - 1];
            if (z + 1 < arraySize, h + 1 < arraySize)
            {
                liveNeighbors += original[z + 1][h + 1];
            }
            cout << liveNeighbors << " ";

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

问题出现在我到目前为止的最后一步中(显示了每个单元格有多少活的邻居).

示例:如果对于4x4网格,样本输入首先为"4",然后输入各种1和0,则liveNeighbors值不实际.它可能是数百,最大值应该只有8.

如果你能帮我找到问题的解决方案,那就太好了.但请记住,我是新手.

谢谢 :)

ice*_*ime 5

你的一些条件是错的:

if (z - 1 > -1, h - 1 > -1) /* ... */
if (z - 1 > -1, h + 1 < arraySize) /* ... */
if (z + 1 < arraySize, h - 1 > -1) /* ... */
if (z + 1 < arraySize, h + 1 < arraySize) /* ... */
Run Code Online (Sandbox Code Playgroud)

逗号没有按照你的期望做,你需要的可能是一个逻辑'和',它在C++中是运算符&&:

if ((z - 1 > -1) && (h - 1 > -1)) /* ... */
if ((z - 1 > -1) && (h + 1 < arraySize)) /* ... */
if ((z + 1 < arraySize) && (h - 1 > -1)) /* ... */
if ((z + 1 < arraySize) && (h + 1 < arraySize)) /* ... */
Run Code Online (Sandbox Code Playgroud)

仅为了可读性而添加了额外括号,它们不是必需的.

您知道,这是逗号运算符的标准定义:

由逗号分隔的一对表达式从左到右计算,并且左表达式的值被丢弃.

在你的情况下,逗号左侧的比较基本上没有在if条件中起任何作用.