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

问题是我试图读取一些整数以了解我已经通过的游戏的级别,然后我想将当前级别的整数设置为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); } } 

你可以做你想要的东西(未经测试):

 #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"

执行读取操作时,应检查读取操作是否成功或失败。 你不做事。 有很多代码可以解决问题,而且大部分代码都是错误的。 复制互联网代码示例时要小心。

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

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

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

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