我正在尝试将文本文件中的数据写入数组,但是当我想从该数组中写出值时,它全是零。文本文件的前两行是数字 25,其余是一堆 1 和 0
string line;
int linenr=3;
fstream plik;
plik.open("Maps/default.txt", ios::in);
if(plik.good() == true)
{
while (getline(plik, line))
{
for(int x=0;x<25;x++)
{
for(int y=0;y<25;y++)
{
map[x][y] = atoi(line.c_str());
}
}
linenr++;
}
}
我试图在 while 循环中放置一个 getline 函数,这样它会被调用到文本的最后一行,同时 getline 函数会将文本写入“line”字符串。接下来,字符串中的值将被解析为数组单元格。
仅供参考,
std::istream
在查找整数时跳过换行符和空格:
for (int row = 0; row < 25; ++row)
{
for (int column = 0; column < 25; ++column)
{
int value = 0;
plik >> value;
matrix[row][column] = value;
}
}
上面的片段会将整数读入 25x25 矩阵。
假设输入是空格分隔的整数。
编辑1:逐行
假设每一行包含一行数据。
for (int row = 0; row < 25; ++row)
{
// Read in a row of numbers.
std::string row_text;
std::getline(plik, row_text);
// Process the row text
std::istringstream row_stream(row_text);
int value = 0;
for (int column = 0; column < 25; ++column)
{
row_stream >> value;
map[row][column] = value;
}
}
编辑2:非常简单
这里很简单,但是你需要添加一些验证:
int value;
int row = 0;
int column = 0;
while (plik >> value)
{
matrix[row][column] = value;
++column;
if (column >= 25)
{
column = 0;
++row;
}
}
还有其他方法可以将空格分隔的输入读入矩阵。