c-如何在文件中读取和写入整数



问题是,我试图读取一些整数,以了解我已经通过的游戏级别,然后如果t还没有通过,我想将当前级别的整数设为1。它创建文件,但不写入任何内容。有人知道为什么吗?现在,它在使用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);
  }
}

你可以做你想做的事情,比如这样(未经测试):

#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);
}

这不是读取文件的方式。

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

执行读取操作时,应检查读取操作是否成功或失败。你不做feof。有很多代码执行feof,其中大部分都是错误的。在复制互联网上的代码示例时要小心。

此外,阅读您使用的任何标准函数的文档也是一个好主意。你可能会学到一些你不知道的关于函数的东西。例如,fscanf返回成功读取的项目数。

因此,在您的阅读循环中,检查fscanf是否返回8(或者按照ooga的建议循环8次,每次检查1)。循环过程中不要检查feof

一旦读取失败,如果您想知道的话,那么您可以选择执行feof来找出读取失败的原因。它可能会失败,因为您碰到了文件的末尾(feof),或者因为设备错误(ferror),或者文件中有单词而不是数字。

当你写的部分,确保你只写成功读取的数字。

相关内容

  • 没有找到相关文章

最新更新