【问题标题】:Array filling up with incorrect values数组填充不正确的值
【发布时间】:2020-02-01 16:07:12
【问题描述】:

我正在创建一个依赖于一组二维数组的程序。在我目前正在处理的部分中,用户首先输入所需的(方形'边)大小,并且程序应该初始化所有数组并用 0 填充它们,除了 0 行和列,其中标签是成为。生成的数组必须看起来像这样:

0 1 2 3 4 ...
1 0 0 0 0 ...
2 0 0 0 0 ...
3 0 0 0 0 ...
4 0 0 0 0 ...
...

我编写的代码看起来不错,但是一旦实现了标签,整个内部(标签不受影响)开始填充一些随机数,大约每第二个字段出现 0。这段代码暂时可以独立工作,但我会将一些变量移到全局范围以连接这些部分:

 int show_Board(int size){
    size++;
    int board[size][size];
    int i=0, x=0;
    for (i=0; i<size; i++){     //filling up the array
        for (x=0; x<size; x++){
            board[i][x]=0;  
        }
    for (i=0; i<=size; i++){    //filling in labels on the borders
        board[i][0]=i;          // only row 0 breaks if this loop is disabled
        for (x=0; x<=size; x++){
            board[0][x]=x;
        } 
    }       
    }
    for (i=0; i<size; i++){        //displaying the result
        for (x=0; x<size; x++){
            cout <<"  "<< board[i][x];
        }
        cout << endl;
    }
}

int main(){
  show_Board(20);
}

我的问题是如何使数组正确填充(即标签和 0)?

【问题讨论】:

  • 当您使用调试器运行程序时,您看到了什么?这就是调试器的用途。如果您不知道如何使用调试器,这是一个学习如何使用调试器一次运行一行的好机会,监控所有变量及其值的变化,并分析程序的逻辑执行流程。知道如何使用调试器是每个 C++ 开发人员必备的技能,没有例外。在调试器的帮助下,您应该能够快速找到此程序以及您编写的所有未来程序中的所有错误,而无需向任何人寻求帮助。
  • 感谢两位的建议。不幸的是,尝试使用调试器刚刚使我的开发崩溃,我似乎什至不知道如何打开所有文件备份,因此它们实际上正确地出现在项目树中,而不仅仅是单独的源代码文件。我还有很长的路要走
  • ...和/或我现在无法理解调试器输出中有什么问题:/

标签: c++ arrays multidimensional-array


【解决方案1】:
for (int i = 0; i < size; i++){    
    for (x=0; x < size; x++){
            board[i][x]=0;  
    }
    for (int i = 0; i <= size; i++){    
        board[i][0]=i;          
        for (int x = 0; x <= size; x++){
            board[0][x]=x;
        } 
    }       
}

这是您的代码中的一个 sn-p,只是稍微清理了一下。请注意,您在错误的位置关闭了第一个 for 循环,因此它实际上具有用于在其中设置标签的循环。不幸的是,这是编写丑陋代码的结果。这段代码不仅写得不好,而且做的工作比它需要的要多。更容易发现错误、修复和优化好的代码,所以这是你绝对应该研究的。

编辑:您还在第一个循环中使用 i

我不知道你为什么在函数的开头增加 size,因为这会创建一个比用户要求的大 1 的正方形。

这是我的解决方案:

#include <iostream>

int show_board(int size) {

    // size++;
    int board[size][size];

    for (int i = 0; i < size; ++i) {

        for (int j = 0; j < size; ++j) {
            // Set board tile to 0.
            board[i][j] = 0;
        }

        // Set vertical label.
        board[i][0] = i;
        // Set horizontal label.
        board[0][i] = i;

    }

    // Display board
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            std::cout << board[i][j] << " ";
        }
        std::cout << std::endl;
    }

}

int main() {
    show_board(5);
    return 0;
}

【讨论】:

  • 非常感谢!大小的增量在那里是因为用户输入的大小实际上是可播放字段的大小。因此,必须针对标签的存在进行调整。如果它不存在,当用户要求 5 等时,他们将只有一个 4x4 可玩棋盘。
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多