-1

我正在尝试使用文件处理通过二进制文件中的类输入数据。但是我无法做的是以排序的方式写入数据。就像我不知道如何才能唯一地识别我过去在该特定文件中插入的记录之一。为什么我要这样做?因为我希望能够执行删除、修改特定记录等操作。我尝试使用静态变量,但我想保持该值,直到我下次运行程序,这是静态不可能的。顺便说一句,这是课程。

class question
{
    private:
    char question[500];
    char option1[25],option2[25],option3[25],option4[25];
    int answernumber;
    public:
    int qno;
    void createquestion(); // Just to to accept data into
                           // question,options,answernumebr.
}

现在唯一的问题是分配 qno 问题编号。我打算用它作为我的主键(这个词用错了)。但是我只是想不通如何在没有用户干预的情况下自动为其分配相应的值?有什么建议么?编辑:-我也尝试这样做--->我想阅读最后输入的记录,然后提取相应的问题编号。然后分配那个数字并给它加1......所以old_qno+1=new_qno......但不幸的是没有很好地解决。因为我所有的问题都被分配为问题 1

4

1 回答 1

0

您可以使用您编写的文件的大小来计算到目前为止的问题数量。

ifstream file("filename");
file.seekg(0, ios_base::end);
streampos file_size = file.tellg();
file.close();
int next_question = file_size/sizeof(question) + 1;

但是你必须小心删除,假设你的文件中有问题 1、2、3、4,然后你删除了问题 3。现在你的文件有 1、2、4,所以上面的方法会说下一个问题是4,但您已经有一个问题 4. 处理此问题的一种方法是执行逻辑删除。不是从文件中实际删除问题,而是将其保留在那里,而是以某种方式标记它,以便您知道它已被删除。例如,您可以将问题编号设置为零。因此,在删除问题 3 后回到上面的示例,您将有 1、2、0、4。现在文件大小方法将正确地说下一个问题是 5。

于 2012-08-05T09:13:21.187 回答