C 我的简单控制台游戏';s存储系统

C 我的简单控制台游戏';s存储系统,c,C,我希望每次返回城镇(kasaba)时都保存这些值,在程序开始时,如果有文件,我希望他们从那里获取值,否则我希望分配默认值,我认为最有可能的问题是在检查文件是否存在时,但是我找不到解决方法。我解决了这个问题 FILE* f; f = fopen( "save.txt", "r"); int healthlvl, swordlvl, dexlvl, willlvl, maxhealth, sword, dex, will, e

我希望每次返回城镇(kasaba)时都保存这些值,在程序开始时,如果有文件,我希望他们从那里获取值,否则我希望分配默认值,我认为最有可能的问题是在检查文件是否存在时,但是我找不到解决方法。

我解决了这个问题

    FILE* f;
    f = fopen( "save.txt", "r");
    
    int healthlvl, swordlvl, dexlvl, willlvl, maxhealth, sword, dex, will, experience, iblisparcasi, iksir;
    
    if (f == NULL) {
        healthlvl = 1, swordlvl = 1, dexlvl = 1, willlvl = 1, maxhealth = 100, sword = 10, dex = 21, will = 10, experience = 0, iblisparcasi = 10, iksir = 0;
    }

    else {
        fscanf(f, "%d %d %d %d %d %d %d %d %d %d %d", &healthlvl, &swordlvl, &dexlvl, &willlvl, &maxhealth, &sword, &dex, &will, &experience, &iblisparcasi, &iksir);
    }

    fclose(f);
  
kasaba:

    f = fopen( "save.txt", "w");

    fprintf(f, "%d %d %d %d %d %d %d %d %d %d %d", healthlvl, swordlvl, dexlvl, willlvl, maxhealth, sword, dex, will, experience, iblisparcasi, iksir);

    fclose(f);

你是用C++还是C++?假设这是C++,请在这个问题上扩展,并强烈地考虑构造一个。如果进行MRE不会导致您发现并解决问题,请编辑问题并用MRE替换当前示例代码。注意
fclose(f)
应移到上面的
else
代码块中,否则您将
fclose(NULL)看起来像是一个可以通过调试器轻松解决的问题。更容易的是,将代码片段发布在SO上,而不是真正解释问题所在。片段本身不可编译,无法再现问题,并且您没有明确说明它的行为以及与预期的不同。您通过两次打开文件而不是在再次尝试打开之前关闭文件来“修复”它?对我来说,这似乎不是一个解决办法,似乎是你意外地使它工作了。
FILE* f;
    f = fopen( "save.txt", "r");
    
    int healthlvl, swordlvl, dexlvl, willlvl, maxhealth, sword, dex, will, experience, iblisparcasi, iksir;
    
    if ((f = fopen("save.txt", "r")) == NULL) {
        healthlvl = 1, swordlvl = 1, dexlvl = 1, willlvl = 1, maxhealth = 100, sword = 10, dex = 21, will = 10, experience = 0, iblisparcasi = 10, iksir = 0;
    }

    else {
        fscanf(f, "%d %d %d %d %d %d %d %d %d %d %d", &healthlvl, &swordlvl, &dexlvl, &willlvl, &maxhealth, &sword, &dex, &will, &experience, &iblisparcasi, &iksir);
    }

kasaba:

    f = fopen( "save.txt", "w");

    fprintf(f, "%d %d %d %d %d %d %d %d %d %d %d", healthlvl, swordlvl, dexlvl, willlvl, maxhealth, sword, dex, will, experience, iblisparcasi, iksir);

    fclose(f);