我的代码有一个严重的问题。我通过以下方式保存一些数据:
void savetofile()
{
fprintf(savefile, "%d\n", run); // here are 1 or 2 characters
fprintf(savefile, "%d\n", gender); // 1 character
fprintf(savefile, "%s\n", name); // here is string, max 20 characters
fprintf(savefile, "%d\n", points1); // between 1 and 3 characters
fprintf(savefile, "%d\n", points2); // between 1 and 3 characters
}
保存后如何阅读?我可以以某种方式具体说明:
fscanf(savefile, "%d", &gender);
具体阅读第 2 行?
也许当我将数据保存到文件时:
void savetofile()
{
fprintf(savefile, "%d ", run); // here are 1 or 2 characters
fprintf(savefile, "%d ", gender); // 1 character
fprintf(savefile, "%s ", name); // here is string, max 20 characters
fprintf(savefile, "%d ", points1); // between 1 and 3 characters
fprintf(savefile, "%d ", points2); // between 1 and 3 characters
}
这样会更容易阅读吗?
最佳答案
有很多方法可以解决这个问题 - 每种方法都有优点和缺点。
在文件中使用带有“标签”的单行来指示数据 ID 怎么样?
void savetofile(int run, int gender, char *name, int points1, int points2) {
fprintf(savefile, "r:%d g:%d n:\"%s\" p1:%d p2:%d\n",
run, gender, name, points1, points2);
}
// return 1: success, EOF:no more 0:problem data
int readfile(int &run, int &gender, char *name, int *points1, int *points2) {
char buf[100]; // Size: 2x longest expected line
if (fgets(buf, sizeof buf, savefile) == NULL) return EOF;
if (sscanf(buf, "r:%2d g:%1d n:\"%19[^\"]\" p1:%3d p2:%3d",
&run, &gender, name, &points1, &points2) != 5) return 0;
return 1;
}
各种其他改进都是可能的,特别是额外的错误检查,但以上是为了实现一些想法。
关于c - 从 C 中具有不同数据类型的文件中读取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47562647/