如何读取和写入文件的整数

时间:2014-04-12 01:32:51

标签: c file file-io

问题在于我试图读取一些整数以了解我已经通过的游戏的级别,然后我想将当前级别的整数设置为1,如果t还没有。它创建文件但不写任何内容。谁知道为什么?现在,它是第一次使用printf创建它时,但是在读取它时会给出状态访问冲突。

void SaveGame(void)
{
  FILE *pFile = fopen("SavedData.txt","rb");
  int MyArray[8] = {0};

  if(pFile)
  {
    fscanf(pFile, "%d %d %d %d %d %d %d %d" , MyArray[0], MyArray[1], MyArray[2], MyArray[3], MyArray[4], MyArray[5], MyArray[6], MyArray[7]);
    fclose(pFile);
  }

  if(MyArray[Current] == 0)
    MyArray[Current] = 1;

  pFile = fopen("SavedData.txt", "wb");

  if(pFile)
  {
    fprintf(pFile, "%d %d %d %d %d %d %d %d" , MyArray[0], MyArray[1], MyArray[2], MyArray[3], MyArray[4], MyArray[5], MyArray[6], MyArray[7]);
    fclose(pFile);
  }
}

2 个答案:

答案 0 :(得分:0)

你可以做你想要的事情(未经测试):

#define SAVE_FILE "SavedData.txt"
#define NUMS_SIZE 8

void SaveGame() {
  FILE *f;

  f = fopen(SAVE_FILE, "r");
  if (!f) {
    fprintf(stderr, "Error: Can't open save file for reading.\n");
    exit(-1);
  }

  int nums[NUMS_SIZE] = {0};
  int n, i = 0;
  while (fscanf(f, "%d", &n) == 1) {
    if (i >= NUMS_SIZE) break;
    nums[i++] = n;
  }
  fclose(f);

  f = fopen(SAVE_FILE, "w");
  if (!f) {
    fprintf(stderr, "Error: Can't open save file for writing.\n");
    exit(-1);
  }
  int j = 0;
  if (i > 0) fprintf("%d", nums[0]);
  for (j = 1; j < i; ++j)
    fprintf(" %d", nums[j]);
  fclose(f);
}

答案 1 :(得分:0)

这不是你读文件的方式。

对于初学者,如果是文本文件,请使用模式"r"打开,而不是"rb"

执行读取操作时,应检查读取操作是否超过或失败。你没有做feof。那里有很多代码feof并且大部分代码都是错误的。在复制互联网代码示例时要小心。

此外,阅读您使用的任何标准功能的文档是一个好主意。您可能会了解有关您不知道的功能的信息。例如,fscanf返回已成功读取的项目数。

所以在你的阅读循环中,要么检查fscanf是否返回8(或者ooga建议循环8次,每次都检查1)。在循环期间不要检查feof

一旦读取失败,那么您可以选择feof来查找读取失败的原因,如果您想知道的话。它可能会因为您到达文件末尾(feof)或由于设备错误(ferror)而失败,或者因为文件中包含单词而非数字。

编写部分时,请确保只编写已成功读取的数字。