常用的数据类型有字符型(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;
}