题目
演示二进制文件操作:先将包含 n 个整数的数组以纯二进制形式写入磁盘文件,随后再重新打开文件读回内存数组中,比对验证写入与读取的数据完全一致。
输入格式:第一行输入整数个数 n;第二行输入 n 个整数。
输出格式:读回验证成功输出 ok,数据不一致或读写失败输出 mismatch。
数据范围与约定:1 ≤ n ≤ 1000。
思路与算法
1. 二进制写入 fwrite
以 "wb" 模式打开文件,调用 fwrite(arr, sizeof(int), n, fp); 将整块内存数据按二进制字节序列直接落盘。
2. 二进制读回 fread
以 "rb" 模式打开文件,调用 fread(buf, sizeof(int), n, fp); 还原内存数据。二进制读写效率显著高于文本序列化解析。
完整程序
#include <stdio.h>
int main(void)
{
int n, a[100], b[100];
if (scanf("%d", &n) != 1 || n < 1 || n > 100) {
return 1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 以二进制写模式 ("wb") 打开文件
FILE *fw = fopen("data.bin", "wb");
// fwrite 直接将内存中的二进制字节流写入文件
fwrite(&n, sizeof n, 1, fw);
fwrite(a, sizeof a[0], (size_t)n, fw);
fclose(fw);
// 以二进制读模式 ("rb") 读回文件
FILE *fr = fopen("data.bin", "rb");
int m;
// fread 原样读入二进制数据到目标内存
fread(&m, sizeof m, 1, fr);
fread(b, sizeof b[0], (size_t)m, fr);
fclose(fr);
// 校验写出与读回的数据是否一致
int ok = (m == n);
for (int i = 0; ok && i < n; i++) {
if (a[i] != b[i]) {
ok = 0;
}
}
printf("%s\n", ok ? "ok" : "fail");
return 0;
}