实验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;
}

输入

为一个整数,只可能是1,2,3,4,5之一。

输出

将dict.dic中的相关内容输出到屏幕上,如果输入是1,则输出那段代码第一次写入的内容,如果输入是2,则输出那段代码第二次写入的内容,依此类推。
形式如样例。

样例输入

1

样例输出

X
1234
2000000000
2000000000
500000000000000
1.234500
9.876543
XXX
1234 1234 1234 1234 1234
2000000000 2000000000 2000000000 2000000000 2000000000
2000000000 2000000000 2000000000 2000000000 2000000000
500000000000000 500000000000000 500000000000000 500000000000000 500000000000000
1.234500 1.234500 1.234500 1.234500 1.234500
9.876543 9.876543 9.876543 9.876543 9.876543

源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    FILE * fp = fopen("dict.dic","rb");
    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 ;
    int n;
    scanf("%d",&n);
    memset(aa,0,5);
    memset(bb,0,5);
    memset(cc,0,5);
    memset(dd,0,5);
    memset(ee,0,5);
    memset(gg,0,5);
    memset(hh,0,5);
    while(--n){
        fread(&a,sizeof(a),1,fp);
        fread(&b,sizeof(b),1,fp);
        fread(&c,sizeof(c),1,fp);
        fread(&d,sizeof(d),1,fp);
        fread(&e,sizeof(e),1,fp);
        fread(&g,sizeof(g),1,fp);
        fread(&h,sizeof(h),1,fp);
        fread(aa,sizeof(a),5,fp);
        fread(bb,sizeof(b),5,fp);
        fread(cc,sizeof(c),5,fp);
        fread(dd,sizeof(d),5,fp);
        fread(ee,sizeof(e),5,fp);
        fread(gg,sizeof(g),5,fp);
        fread(hh,sizeof(h),5,fp);
        memset(aa,0,5);
    }
    fread(&a,sizeof(a),1,fp);
    fread(&b,sizeof(b),1,fp);
    fread(&c,sizeof(c),1,fp);
    fread(&d,sizeof(d),1,fp);
    fread(&e,sizeof(e),1,fp);
    fread(&g,sizeof(g),1,fp);
    fread(&h,sizeof(h),1,fp);
    fread(aa,sizeof(a),5,fp);
    fread(bb,sizeof(b),5,fp);
    fread(cc,sizeof(c),5,fp);
    fread(dd,sizeof(d),5,fp);
    fread(ee,sizeof(e),5,fp);
    fread(gg,sizeof(g),5,fp);
    fread(hh,sizeof(h),5,fp);
    printf("%c\n",a);
    printf("%hd\n",b);
    printf("%d\n",c);
    printf("%ld\n",d);
    printf("%lld\n",e);
    printf("%f\n",g);
    printf("%lf\n",h);
    printf("%s\n",aa);
    for(i = 0;i < 4;i++){
        printf("%hd ",bb[i]);
    }
    printf("%hd\n",bb[i]);
    for(i = 0;i < 4;i++){
        printf("%d ",cc[i]);
    }
    printf("%d\n",cc[i]);
    for(i = 0;i < 4;i++){
        printf("%ld ",dd[i]);
    }
    printf("%ld\n",dd[i]);
    for(i = 0;i < 4;i++){
        printf("%lld ",ee[i]);
    }
    printf("%lld\n",ee[i]);
    for(i = 0;i < 4;i++){
        printf("%f ",gg[i]);
    }
    printf("%f\n",gg[i]);
    for(i = 0;i < 4;i++){
        printf("%lf ",hh[i]);
    }
    printf("%lf\n",hh[i]);
    fclose(fp);
    return 0;
}

不知道这题是干啥的…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值