简介:CS在读小蒟蒻一枚,本文为自学笔记,如有佬指正,不胜感激!
目录
原代码(片段)
string rolename;
bool _continue;
int gender;
int t;
int blood, boss1blood, boss2blood;
int Time;
//存档
FILE* pf = fopen(“fight_file.txt”, “w”);
fputc(gender + ‘0’, pf);
fputc(t + ‘0’, pf);
fputc(boss1blood + ‘0’, pf);
fputc(boss2blood + ‘0’, pf);
fputc(blood + ‘0’, pf);
fputs(rolename.c_str(), pf);
fflush(pf);
int ::fclose(FILE * stream);
//读档
FILE* pf = fopen(“fight_file.txt”, “r”);
gender = fgetc(pf);
if (gender != EOF) {
IMAGE read;
gender -= 48;
int t = fgetc(pf) - 48;
int HP1 = fgetc(pf) - 48;
int HP2 = fgetc(pf) - 48;
int blood = fgetc(pf) - 48;
char name[20];
fgets(name, 20, pf);
int ::fclose(FILE * stream);
cout << “name:” << name << endl;
rolename = name;
}
实际问题
gender和rolename读档无误,但无论数据是什么,bossblood1、bossblood2、blood都是0、0、0
来自chatGPT的建议
存档时写入文件的方式有问题
举例
(以“blood”为例)
在存档时,你将 blood
的值加上 ASCII 码值 '0'
后写入文件。这是一种很不直观的方式,因为它会将 blood
的值从整数转换为 ASCII 字符,并将这些字符写入文件中。在读档时,你从文件中读取这些字符,并将它们解析回整数。
解决方法
将整数变量写入文件时,使用 fprintf
函数将其格式化为字符串,然后使用 fputs
函数将其写入文件中。
在读档时,使用 fgets
函数读取整个字符串,并使用 sscanf
函数解析变量的值。
示例
// 存档
FILE* pf = fopen(“fight_file.txt”, “w”);
if (pf != nullptr) {
fprintf(pf, “%d,%d,%d,%d,%d,%s\n”, gender, t, boss1blood, boss2blood, blood, rolename.c_str());
fclose(pf);
}
// 读档
FILE* pf = fopen(“fight_file.txt”, “r”);
if (pf != nullptr) {
char str[255];
fgets(str, 255, pf);
char* token = std::strtok(str, “,”);
gender = std::atoi(token);
token = std::strtok(nullptr, “,”);
t = std::atoi(token);
token = std::strtok(nullptr, “,”);
boss1blood = std::atoi(token);
token = std::strtok(nullptr, “,”);
boss2blood = std::atoi(token);
token = std::strtok(nullptr, “,”);
blood = std::atoi(token);
token = std::strtok(nullptr, “,”);
rolename = token;
fclose(pf);
}
不求甚解,先照猫画虎一会,如果后续学习深入,将更新~