分数) { 分数=速度; } //得分 ... 数据文件,c++,filestream,C++,Filestream" /> 分数) { 分数=速度; } //得分 ... 数据文件,c++,filestream,C++,Filestream" />

C++;文件流问题 我在C++中做了一个简单的游戏,我希望游戏结束时的最高分数被写在文本文件中。我使用fstream首先读取上次保存的highscore,并将其与新的highscore进行比较。文本文件中的输出看起来像这样(0Бh),但不应该是这样。我真的很失望。 这是我代码的一部分 double score_num=0; fstream datafile("score.pon"); //Declaration of variables ... if(SPEED>score_num) { score_num=SPEED; } //getting the score ... datafile<<score_num; //Writing it to the file double score\u num=0; fstream数据文件(“score.pon”)//变量声明 ... 如果(速度>分数) { 分数=速度; } //得分 ... 数据文件

C++;文件流问题 我在C++中做了一个简单的游戏,我希望游戏结束时的最高分数被写在文本文件中。我使用fstream首先读取上次保存的highscore,并将其与新的highscore进行比较。文本文件中的输出看起来像这样(0Бh),但不应该是这样。我真的很失望。 这是我代码的一部分 double score_num=0; fstream datafile("score.pon"); //Declaration of variables ... if(SPEED>score_num) { score_num=SPEED; } //getting the score ... datafile<<score_num; //Writing it to the file double score\u num=0; fstream数据文件(“score.pon”)//变量声明 ... 如果(速度>分数) { 分数=速度; } //得分 ... 数据文件,c++,filestream,C++,Filestream,我将把错误处理留给你 我将错误处理留给您黑客解决方案-将文件作为ifstream打开,读取现有值,关闭它,调整分数,将文件作为ofstream打开,写入分数,关闭它。或者,研究seekp()函数的使用,并将分数作为二进制值而不是文本写入。黑客解决方案-将文件作为ifstream打开,读取现有值,关闭它,调整分数,将文件作为ofstream打开,写入分数,关闭它。或者,研究seekp()函数的使用,并将分数作为二进制值写入,而不是作为文本写入。关于原始文件失败的原因,我的最佳猜测是,当您从文件中读

我将把错误处理留给你


我将错误处理留给您

黑客解决方案-将文件作为ifstream打开,读取现有值,关闭它,调整分数,将文件作为ofstream打开,写入分数,关闭它。或者,研究seekp()函数的使用,并将分数作为二进制值而不是文本写入。

黑客解决方案-将文件作为ifstream打开,读取现有值,关闭它,调整分数,将文件作为ofstream打开,写入分数,关闭它。或者,研究seekp()函数的使用,并将分数作为二进制值写入,而不是作为文本写入。

关于原始文件失败的原因,我的最佳猜测是,当您从文件中读取最后一个字符时,设置了。在此状态下,所有读写操作都会失败。您可以先调用
clear
写入已到达其结尾的文件流

//以下命令不会截断文件或处理其他错误情况。
if(datafile.eof()){
datafile.clear();
}
seekp(0,std::ios\u base::beg);

datafile我对原版失败原因的最佳猜测是,当您从文件中读取最后一个字符时,设置了。在此状态下,所有读写操作都会失败。您可以先调用
clear
写入已到达其结尾的文件流

//以下命令不会截断文件或处理其他错误情况。
if(datafile.eof()){
datafile.clear();
}
seekp(0,std::ios\u base::beg);


数据文件您在哪里读取以前的分数?文件中有什么?您希望文件中有什么?文件不完整。请这样做(同时保持简洁)。@dominic hamon文件的内容是读取的,但文件中没有写入任何内容@outis这些是我用来读取(数据文件>>score_num)和写入文件的行,其他行是不相关的。不相关的行可以省略,但示例代码至少应该是这样。更新问题中的代码,而不是通过注释。当其他人尝试填写代码时,他们可能不会犯与你相同的错误(尽管他们可能会犯其他错误)。@outis-是的,我知道我是个新手,但我会尝试。谢谢你的建议!你在哪里读以前的分数?文件中有什么?您希望文件中有什么?文件不完整。请这样做(同时保持简洁)。@dominic hamon文件的内容是读取的,但文件中没有写入任何内容@outis这些是我用来读取(数据文件>>score_num)和写入文件的行,其他行是不相关的。不相关的行可以省略,但示例代码至少应该是这样。更新问题中的代码,而不是通过注释。当其他人尝试填写代码时,他们可能不会犯与你相同的错误(尽管他们可能会犯其他错误)。@outis-是的,我知道我是个新手,但我会尝试。谢谢你的建议!OFFASH不起作用,因为我必须先从文件中读取高分,并将它与BuffelTebug ME中的分数进行比较,如果我错了,但我非常确信,关闭流也会隐含地刷新它。C++:我认为这取决于(我的C++ MEM在这里是马虎的)。我想这取决于所使用的流类,以及缓冲区是拥有的还是共享的等等@Martin:你打算覆盖文件吗?在这种情况下,你在哪里做这些工作?@Martin:应该没有必要(文件将在以后保存)。如果它有效,它可能只是间接地解决了这个问题(如果您发布了完整的示例代码,我们可以告诉您)OFFROW不能工作,因为我必须先从文件中读取高分,并将它与BuffelTebug C++中的分数进行比较,如果我错了,但我非常确信,关闭流也会隐含地刷新它。我想这取决于所使用的流类,以及缓冲区是拥有的还是共享的等等@Martin:你打算覆盖文件吗?在这种情况下,你在哪里做这些工作?@Martin:应该没有必要(文件将在以后保存)。如果它有效的话,很可能只是间接地解决了这个问题(如果你发布了完整的示例代码,我们可以告诉你)。i、 我得了9.1分,然后得了9.7分,但它没有记录下来。因此,我在写入文件之前添加了datafile.clear(),希望不会再遇到任何问题!谢谢@Martin:请注意,在写入之前,您应该做的不仅仅是调用
clear
,以正确处理错误,因为文件流可能处于其他错误状态,从而导致写入失败。请参阅更新。我今天上午一直在想为什么修复只在某些时候起作用。i、 我得了9.1分,然后得了9.7分,但它没有记录下来。因此,我在写入文件之前添加了datafile.clear(),希望不会再遇到任何问题!谢谢@Martin:请注意,在写入之前,您应该做的不仅仅是调用
clear
,以正确处理错误,因为文件流可能处于其他错误状态,从而导致写入失败。请参阅更新。
#include <iostream>
#include <fstream>

using namespace std;
#define SPEED 12

int main()
{
    double score_num=0;
    ofstream datafile("score.pon"); //Declaration of variables


    if(SPEED>score_num)
    {
        score_num=SPEED;
    }
    //getting the score

    datafile<<score_num; //Writing it to the file
    return 0;
}
datafile.flush();
datafile.close();