问题在于我试图读取一些整数以了解我已经通过的游戏的级别,然后我想将当前级别的整数设置为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);
}
}
答案 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
)而失败,或者因为文件中包含单词而非数字。
编写部分时,请确保只编写已成功读取的数字。