二维数组问题

时间:2014-06-24 21:14:25

标签: c++ arrays multidimensional-array

我正在尝试使用C ++中的2D数组映射数独网格。 我一直在通过比较输入到"转储"来测试代码。 2d阵列 阵列是9x9。 我的问题是,前8列都是完美的。但最后一栏似乎在9个案例中有8个是错误的。为什么会这样?

CODE:

#include <iostream>
#include <fstream>
#include <string>

int i = 0;
int j = 0;
const char test[12] = {'e', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*'};
std::string abc = "";

// Class to map out a sudoku grid
class grid {

    public:

    char board[8][8];

    void mapChars(std::string fileName) {

            int x = 0;
            int y = 0;  

            std::string line;
            std::ifstream myfile (fileName.c_str());

            if (myfile.is_open()) {
                while (getline(myfile,line)) {
                    for(std::string::size_type i = 0; i < line.size(); ++i) {
                        if(strchr(test, line[i]) != NULL){
                            if (line[i] == 'e') {
                                y++; x=0;
                            } else {
                                    board[y][x] = line[i];
                                    x++;

                            }
                        }
                    }   
                } myfile.close();
            }
    }

    void dumpMap() {
        while(j < 9){
            while(i < 9){

            std::cout << board[j][i] << ' ';
            ++i;            

            } 
            std::cout << std::endl;
            ++j;
            i = 0;
        }
    }
} sudoku;

int main() {

    sudoku.mapChars("easy1.map");
    sudoku.dumpMap();
    std::cin >> abc;
    return 0;

}

1 个答案:

答案 0 :(得分:5)

你在这里声明一个8乘8的数组:char board[8][8]。如果您希望它是9乘9,请使用char board[9][9]。我猜你把索引与索引混淆了。当您声明char board[8][8]时,board具有从0..7开始的第一个索引以及类似的第二个索引。

获取值输出而不是错误的原因是因为未定义和索引越界访问的输出。当您的代码尝试访问board[i][j]时,可执行文件所执行的操作是使用您为ij提供的值来确定应从哪个内存部分检索数据。如果ij超出范围,您的可执行文件将打印出实际上与board无关的内存,并且实际上是垃圾值,就像您遇到的那样。