从具有多列整数的文件中读取并将它们放入数组中

时间:2015-05-14 05:27:22

标签: c++ arrays file-io

我正在创建一个具有保存和继续功能的命令行扫雷游戏。我的代码生成一个名为“save.txt”的文件,它存储了地雷的位置和玩家打开的单元格。它被分隔成由空格分隔的两列,其中左列表示单元格的行,右列表示由我的代码生成的矩阵中的单元格列。以下是示例运行后save.txt的内容:

3 7
3 9
5 7
6 7
8 4
Mine end
2 9
1 10
3 5
1 1
Cell open end

您可能已注意到Mine endCell open end。这两个基本上将数字分成两组,其中第一组用于地雷的位置,而后者用于由玩家打开的单元的位置。我创建了一个代码,为每个列生成一个数组,条件是文本文件包含整数:

int arrayRow[9];
int arrayCol[9];
ifstream infile("save.txt");
int a, b;
while(infile >> a >> b){
    for(int i = 0; i < 9; i++){
        arrayRow[i] = a;
        arrayCol[i] = b;
    }
}

正如您所看到的,这对我的文本文件不起作用,因为它包含非整数文本。基本上,我想创建四个数组:mineRowmineColopenedRowopenedCol,如第一段所述。

2 个答案:

答案 0 :(得分:1)

除了自己解析字符串并进行字符串操作之外,您可以重新定义文件格式以获得标题。然后你可以解析一次并保留所有数字。即:

让标题成为前两行

Row 1 = mineRowLen mineColLen  
Row 2 = openedRowLen openedColLen  
Row 3...N = data

save.txt: 
40 30  
20 10  
// rest of the entries

然后你只读了40为mineRow,30为mineCol,20为openRow,10为opensCol,因为你知道他们的长度。这可能会更难调试,但会允许您更好地隐藏保存状态以禁止对其进行简单修改。

答案 1 :(得分:0)

You can read the file line by line.
If the line matches "Mine end" or "Cell open end", continue;
Else, split the line by space (" "), and fill the array.