gpt4 book ai didi

c++ - 文本文件中的值未写入二维数组?

转载 作者:行者123 更新时间:2023-11-30 03:45:05 25 4
gpt4 key购买 nike

我正在尝试获取文本文件的值并将其加载到二维数组中。我遇到的问题是 char 变量的值似乎只覆盖每个空白位置,我不确定为什么。

所以我打开了文件,我可以访问它来读取它的内容或在屏幕上显示它们,然后像​​这样设置我的二维数组:

    char chessBoards[BOARD_SIZE - 1][BOARD_SIZE - 1] = {{'A'}}; // All elements of 2D array initialized

int x = 0; // line position - which line we are looking at
int y = 0; // row position - which row we are looking at

在这个测试中,输出是所有 C 字符和一个 D 字符,我后来告诉它是,所以我的问题似乎是文本文件的位置没有被复制到 char 变量。

file.open(games);
char point = 'Z';
while (file.get(point))
{
for (int x = 0; x < BOARD_SIZE; x++)
{

for (int y = 0; y < BOARD_SIZE; y++)
{
chessBoards[x][y] = point;
}
}

}

chessBoards[1][1] = 'D';
cout << chessBoards[1][1];


for (int x = 0; x < BOARD_SIZE; x++)
{

for (int y = 0; y < BOARD_SIZE; y++)
{
cout << "chessBoards[" << x << "][" << y << "]: ";
cout << chessBoards[x][y] << endl;
}
}

但在这个变体中,除了“D”之外,每个值都是空白

file.open(games);
char point = 'Z';
while (file.get(point))
{
for (int x = 0; x < BOARD_SIZE; x++)
{

for (int y = 0; y < BOARD_SIZE; y++)
{
chessBoards[x][y] = 'C';
}
}

}
cout << chessBoards[1][1];


for (int x = 0; x < BOARD_SIZE; x++)
{

for (int y = 0; y < BOARD_SIZE; y++)
{
cout << "chessBoards[" << x << "][" << y << "]: ";
cout << chessBoards[x][y] << endl;
}
}

这告诉我,它一开始并没有正确地从文件中获取值,但是在这个版本中,在顶部显示文件的内容没有问题。但是,如果我尝试将其他内容放在同一区域,它只会覆盖数组的第一个位置并停止。

    file.open(games);
char point = 'Z';
while (file.get(point))
{
for (int x = 0; x < BOARD_SIZE; x++)
{

for (int y = 0; y < BOARD_SIZE; y++)
{
chessBoards[x][y] = 'C';

}

}

chessBoards[x][y] = 'C';
chessBoards[x][y] = point;
cout << point;

}

chessBoards[1][1] = 'D';
cout << chessBoards[1][1];

最佳答案

让我们从一行中的两个错误开始:

char chessBoards[BOARD_SIZE - 1][BOARD_SIZE - 1] = {{'A'}};

首先,你必须使用BOARD_SIZE (不是 BOARD_SIZE-1 )适合您的维度。这将允许在 0 和 BOARD_SIZE-1 之间建立索引包括的。您的循环中有未定义的行为。

由于您一直在注销数组的末尾,因此您可能会破坏堆栈中的其他变量,并且任何事情都可能发生。像这样声明板:

char chessBoards[BOARD_SIZE][BOARD_SIZE];

其次,该初始化不会将每个元素初始化为'A' .它只初始化第一个,然后将所有其他元素归零。你想要像 std::fill_n 这样的东西(来自 <algorithm> ):

std::fill_n( (char*)chessBoards, BOARD_SIZE * BOARD_SIZE, 'A' );

或者只是 memset (老派风格):

memset( chessboards, 'A', sizeof(chessBoards) );

现在是实际的电路板读数。你一直在为每个角色重写整个棋盘。这意味着当你的 while循环最终结束,棋盘将包含最后读取的字符。这可能是换行符,因此稍后输出板时它会显示为空。

本质上,您是在错误的循环部分读取文件。改为这样做:

file.open( games );
if( file.is_open() )
{
for( int x = 0; x < BOARD_SIZE; x++)
{
for (int y = 0; y < BOARD_SIZE; y++)
{
char point = 'C';
if( !file.get( point ) )
std::cout << "Error reading " << x << "," << y << std::endl;
chessBoards[x][y] = point;
}
}
}

关于c++ - 文本文件中的值未写入二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35073530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com