问题是,我试图读取一些整数,以了解我已经通过的游戏级别,然后如果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
),或者文件中有单词而不是数字。
当你写的部分,确保你只写成功读取的数字。