void ReadFile() { FILE* fp; long len; int i; if ((fp = fopen("fam. dat", "rb")) == NULL) n = 0; return; } fseek(fp, 0, 2); len = ftell(fp); rewind(fp); n = len / sizeof(FamType); for (i = 0; i < n; i++) fread(&fam[i], sizeof(FamType), 1, fp); void SaveFile() { int i,n; FILE* fp; if ((fp = fopen("fam. dat", "wb")) == NULL) { printf("\n >>数据家谱文件不能打开\n\n"); return; } for (i = 0; i < n; i++) fwrite(&fam[i], sizeof(FamType), 1, fp); fclose(fp); void InputFam() { printf("\n >>输入父亲、母亲和儿子姓名:\n"); scanf("%s%s%s", fam[n].father, fam[n].wife, fam[n].son); n++; } void outputFile() { int i,n; if (n <= 0) { printf("\n >>没有任何记录\n"); return; } printf("\n 父亲 母亲 儿子\n"); printf(" \n"); for (i = 0; i < n; i++) printf(" %10s%10s%10s\n", fam[i].father, fam[i].wife, fam[i].son); printf(" \n\n"); }改错
时间: 2024-02-14 14:15:07 浏览: 20
这段代码有很多错误,我来一一指出并修正:
1. `ReadFile()` 函数中的 `return` 语句应该放在 `if` 语句内部,否则无论文件是否成功打开,函数都会直接返回。
2. 在 `ReadFile()` 函数中,读取文件之前应该检查文件是否已经成功打开,因为如果文件打开失败,后面的操作都无法进行。
3. 在 `SaveFile()` 函数中,变量 `n` 没有被赋值,应该在函数开始处定义并初始化。
4. 在 `SaveFile()` 函数中,写入文件之前应该检查文件是否已经成功打开,因为如果文件打开失败,后面的操作都无法进行。
5. 在 `InputFam()` 函数和 `outputFile()` 函数中,变量 `n` 没有被定义。
6. 在 `outputFile()` 函数中,输出表格的格式有误,应该先输出表头。
修正后的代码如下:
```
void ReadFile() {
FILE* fp;
long len;
int i;
if ((fp = fopen("fam.dat", "rb")) == NULL) {
n = 0;
return;
}
fseek(fp, 0, 2);
len = ftell(fp);
rewind(fp);
n = len / sizeof(FamType);
for (i = 0; i < n; i++)
fread(&fam[i], sizeof(FamType), 1, fp);
fclose(fp);
}
void SaveFile() {
int i, n = ::n;
FILE* fp;
if ((fp = fopen("fam.dat", "wb")) == NULL) {
printf("\n >>数据家谱文件不能打开\n\n");
return;
}
for (i = 0; i < n; i++)
fwrite(&fam[i], sizeof(FamType), 1, fp);
fclose(fp);
}
void InputFam() {
printf("\n >>输入父亲、母亲和儿子姓名:\n");
scanf("%s%s%s", fam[n].father, fam[n].wife, fam[n].son);
n++;
}
void outputFile() {
int i, n = ::n;
if (n <= 0) {
printf("\n >>没有任何记录\n");
return;
}
printf("\n 父亲 母亲 儿子\n");
printf(" ============================\n");
for (i = 0; i < n; i++)
printf(" %10s%10s%10s\n", fam[i].father, fam[i].wife, fam[i].son);
printf(" ============================\n\n");
}
```