实验12_6_初识二进制文件

常用的数据类型有字符型(char 型)、短整型(short 型)、整型(int 型)、长整型(long 型)、拓展长整型(long long 型)、单精度浮点型(float 型)、双精度浮点型(double 型)。问题围绕着数据类型与二进制文件展开。现有一个二进制文件,文件名为dict.dic,生成这个文件的C语言代码大概是这样的:
变量如下:
char a,aa[5];//注意这里数组aa为正常使用的字符串,所以会包含字符’\0’,它不需要输出
short b,bb[5];
int c,cc[5];
long d,dd[5];
long long e,ee[5];
float g,gg[5];
double h,hh[5];
int i ;

写入的代码段是这样:
fwrite(&a,sizeof(a),1,fp);
fwrite(&b,sizeof(b),1,fp);
fwrite(&c,sizeof©,1,fp);
fwrite(&d,sizeof(d),1,fp);
fwrite(&e,sizeof(e),1,fp);
fwrite(&g,sizeof(g),1,fp);
fwrite(&h,sizeof(h),1,fp);
fwrite(aa,sizeof(a),5,fp);
fwrite(bb,sizeof(b),5,fp);
fwrite(cc,sizeof©,5,fp);
fwrite(dd,sizeof(d),5,fp);
fwrite(ee,sizeof(e),5,fp);
fwrite(gg,sizeof(g),5,fp);
fwrite(hh,sizeof(h),5,fp);

这个代码段被连续执行了5次。当然每次写入的数据是不同的。

你的任务是从dict.dic中按照输入的顺序,读出7种单独变量,分别存到对应类型的变量中,假设为a、b、c、d、e、g、h。再从该文件中读出7个长度为5的数组,分别存到aa[5]、bb[5]、cc[5]、dd[5]、ee[5]、gg[5]、hh[5]中。最后将它们的值全部输出到屏幕上。
注意,所有变量均不会超过其存储范围。

内容提示:在本题对文件的操作内容中,会用到C语言文件操作函数,其打开文件的方式,如下:
1.FILE *fp=fopen(“file.dat”,“rb”);//"rb"为以只读方式打开二进制文件。
2.fread的样例代码:
#include<stdio.h>
int main()
{
int c,cc[5]={0};
FILE *fp=fopen(“file.dat”,“rb”);
fread(&c,sizeof(int),1,fp); //从fp指向的文件中读出一个整型变量
fread(cc,sizeof(int),5,fp); //从fp指向的文件中读出一个长度为5的整型数组。
fclose(fp);
return 0;
}```c
#include<stdio.h>

int main()
{
FILE* fptr;
int order = 0, i = 0;
char a, aa[5];
short b, bb[5];
int c, cc[5];
long d, dd[5];
long long e, ee[5];
float g, gg[5];
double h, hh[5];

注:这题是四道文件题中最简单得一道,让学生熟悉二进制文件得读写操作,注意细心。

#include<stdio.h>

int main()
{
	FILE* fptr;
	int order = 0, i = 0;
	char a, aa[5];
	short b, bb[5];
	int c, cc[5];
	long d, dd[5];
	long long e, ee[5];
	float g, gg[5];
	double h, hh[5];

	scanf("%d", &order);
	if ((fptr = fopen("dict.dic", "rb")) == NULL)
		printf("Open dict.dic error!\n");
	else
	{
		fseek(fptr, (order - 1) * (sizeof(a) + sizeof(aa) + sizeof(b) + sizeof(bb) + sizeof(c) + sizeof(cc) + sizeof(d)
			+ sizeof(dd) + sizeof(e) + sizeof(ee) + sizeof(g) + sizeof(gg) + sizeof(h) + sizeof(hh)), 0);
		fread(&a, sizeof(char), 1, fptr);
		printf("%c\n", a);
		fread(&b, sizeof(short), 1, fptr);
		printf("%hd\n", b);
		fread(&c, sizeof(int), 1, fptr);
		printf("%d\n", c);
		fread(&d, sizeof(long), 1, fptr);
		printf("%ld\n", d);
		fread(&e, sizeof(long long), 1, fptr);
		printf("%lld\n", e);

		fread(&g, sizeof(float), 1, fptr);
		printf("%f\n", g);

		fread(&h, sizeof(double), 1, fptr);
		printf("%lf\n", h);

		fread(aa, sizeof(a), 5, fptr);
		printf("%s\n", aa);

		fread(bb, sizeof(b), 5, fptr);
		for (i = 0; i < 5; i++) printf("%hd ", bb[i]);
		printf("\n");
		fread(cc, sizeof(c), 5, fptr);
		for (i = 0; i < 5; i++) printf("%d ", cc[i]);
		printf("\n");
		fread(dd, sizeof(d), 5, fptr);
		for (i = 0; i < 5; i++) printf("%ld ", dd[i]);
		printf("\n");
		fread(ee, sizeof(e), 5, fptr);
		for (i = 0; i < 5; i++) printf("%lld ", ee[i]);
		printf("\n");
		fread(gg, sizeof(g), 5, fptr);
		for (i = 0; i < 5; i++) printf("%f ", gg[i]);
		printf("\n");
		fread(hh, sizeof(h), 5, fptr);
		for (i = 0; i < 5; i++) printf("%lf ", hh[i]);
		printf("\n");
	}
	fclose(fptr);
	return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值