0

假设我有一个二进制文件、一个文本文件和 3 个结构成员。我已经为结构成员 1 写了一组数字,我们称之为“score1”。现在,我想用 struct member 2“score final”更新二进制文件。

例如,这个最终分数将计算 score1 的百分比并将其写入二进制文件。现在我们将写入 score2 的第二组值。当我这样做时,score1 值以及二进制文件中的原始分数最终值都消失了,现在我只有分数 2 和从 score2 计算的新分数最终值。

我的代码示例:

struct Scores{
float score1;
float score2;
float final;
};

fstream afile;
fstream afile2;

//afile will read in sets of score1 values from text file

//afile2 will output sets of score1 values to binary file
//while final is also outputted.

//Then, afile will again read in sets different of score2 values from text file
//afile 2 will output sets of score1 values to binary file 
//and final is also outputted but with new calculations

正在读取的文本文件将如下所示;

12.2
41.2
51.5
56.2
9.2

and the second text file:
76.1
5.7
62.3
52.7
2.2

我会将结构 score1 和 score2 和 final 输出到一个看起来像这样的文本文件

Final   Score1   Score2 
       12.2      76.1
       41.2      5.7
       51.5      62.3
       56.2      52.7
       9.2       2.2 

最后一栏是空的,但你明白我的意思。

现在的问题:

  1. 每次我将它输出到文本文件时,我只能做最后一列,score1,或者最后一列 score2。但不是 score1, score2, final。

  2. 我希望能够将 score1 的最终结果相加,并与 score2 的最终结果相加,并输出两个决赛的相加。

现在,由于这是一项任务,我有一些限制,我必须坚持完成的任务。

规则:从文本文件中读取 score1 和 score2。使用二进制存储 score1, score2, final。使用这三列写入单个文本文件。

4

2 回答 2

2

这是不可能的。IO 流类允许您将数据附加到现有文件或截断它并从头重写所有内容。

在您的情况下,附加不起作用。所以你剩下的就是截断并重写文件中你想要的所有信息。

于 2013-01-16T14:16:05.633 回答
0

如果您的二进制文件是 struct Scores 对象的简单列表,您可以实现两个非常简单的函数来修改二进制文件(不检查错误,如果它编译等 - 自己做)。

Scores readScores(std::ifstream& file, unsigned int scoresNum)
{
    Scores scores;
    file.seekg(scoresNum*sizeof(Scores), std::ios_base::beg);
    file.read(static_cast<char*>(&scores),sizeof(Scores));
    return scores;
}

void writeScores(std::ofstream& file, unsigned int scoresNum, const Scores& scores)
{
    file.seekp(scoresNum*sizeof(Scores), std::ios_base::beg);
    file.write(static_cast<char*>(&scores),sizeof(Scores));
}

您加载第一个文本文件,修改二进制文件。然后是第二个文件,再次修改并根据二进制文件的最终状态生成结果。我希望它能帮助你解决问题。

于 2013-01-16T16:10:26.410 回答