Issue with 2D Array
Issue with 2D Array
我试图在c++中使用2D数组绘制数独网格。我一直在通过将输入与2d数组的"转储"进行比较来测试代码。数组是9x9。我的问题是,前8栏都是完美的。但最后一栏似乎在9个案例中有8个是错误的。为什么会这样呢?
代码:#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;
}
在这里声明一个8 × 8的数组:char board[8][8]
。如果你想让它是9 × 9,用char board[9][9]
。我猜你把声明和索引混淆了。当声明char board[8][8]
时,board
有一个从0开始的第一个索引。7和类似的第二指数。
得到值输出而不是错误的原因是和索引越界访问的输出是未定义的。当你的代码试图访问board[i][j]
时,可执行程序所做的就是使用你给它的i
和j
的值来确定它应该从内存的哪一部分检索数据。如果i
和j
超出范围,则您的可执行文件打印出的内存实际上与board
根本没有关联,并且实际上是垃圾值,正如您遇到的那样。
相关文章:
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 为什么不能用两层列表初始值设定项初始化 2D std::array?
- 创建 2D 数组类:如何访问 2D 数组类(如 array[x][y))中的元素
- 2D Array in C++ -
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 2D-Array 会在存储新元素时删除元素本身
- Buffer.BlockCopy Array 2d c++ to C# 共享内存
- C++ 2D Char array
- 为什么不能简单地初始化(用大括号)2D std::array?
- 用于初始化 2D std::array 成员的初始值设定项列表
- iPhone SDK 2d int array
- c++ 2d array显示功能
- 将2D-Array传递给c++函数
- 将行和列大小未知的2d-Array传递给函数(c++)
- 2D-Array(矩阵)访问错误
- Issue with 2D Array
- 检查2D Array中相邻的对角线位置
- 创建2D-Array以输出pmm文件