#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int n;
int a;
short b,c;
scanf("%d",&n);
if(n==1)
{
if((fp=fopen("aaa.dic","r"))==NULL)
exit(1);
}
if(n==2)
{
if((fp=fopen("bbb.dic","r"))==NULL)
exit(1);
}
fseek(fp,4,0);
fread(&a,4,1,fp);
fread(&b,2,1,fp);
b=(b-32-1)/32;
fread(&c,2,1,fp);
printf("%d\n%d\n%d",a,b,c);
fclose(fp);
return 0;
}
或者使用结构体,将文件标志信息用结构体存起来:
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char biaozhi;
char shijian[3];
int zongshu;
short long1;
short long2;
char empty[20];
}HEAD;
int main()
{
FILE *fp;
int n;
scanf("%d",&n);
if(n==1)
{
if((fp=fopen("aaa.dic","r"))==NULL)
exit(1);
}
if(n==2)
{
if((fp=fopen("bbb.dic","r"))==NULL)
exit(1);
}
HEAD head;
fread(&head,32,1,fp);
printf("%d\n%d\n%d",head.zongshu,(head.long1-32-1)/32,head.long2);
fclose(fp);
return 0;
}
下面是第二题:
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
int n,c,d,i;
char a,b;
char s[10];
scanf("%d",&n);
if(n==1)
{
if((fp=fopen("aaa.dic","r"))==NULL)
exit(1);
}
if(n==2)
{
if((fp=fopen("bbb.dic","r"))==NULL)
exit(1);
}
fseek(fp,8,0);
fread(&d,2,1,fp);
d=(d-32-1)/32;
for(i=1;i<d;i++)
{
fseek(fp,32*i,0);
fread(&s,10,1,fp);
if(strcmp(s,"math")==0)//寻找math的字段
{
fseek(fp,2,1);//跳过10和11,以便读字段起始位置
fread(&c,4,1,fp);//起始位置
fread(&a,1,1,fp);//字段长度
fread(&b,1,1,fp);//小数位数
break;
}
}
printf("%d\n%d\n%d",a,b,c);
fclose(fp);
return 0;
}
结构体修改:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char biaozhi;
char shijian[3];
int zongshu;
short long1;
short long2;
char empty[20];
}HEAD;
typedef struct{
char name[10];
char empty_c;
char leixing;
int weizhi;
char long3;
char weishu;
char empty[14];
}FIELD;
int main()
{
FILE *fp;
int n,i,a;
HEAD head;
FIELD field;
scanf("%d",&n);
if(n==1)
{
if((fp=fopen("aaa.dic","r"))==NULL)
exit(1);
}
if(n==2)
{
if((fp=fopen("bbb.dic","r"))==NULL)
exit(1);
}
fread(&head,32,1,fp);
a=(head.long1-32-1)/32;
for(i=0;i<a;i++)
{
fread(&field,32,1,fp);
if(strcmp(field.name,"math")==0)
{
printf("%d\n",field.long3);
printf("%d\n",field.weishu);
printf("%d",field.weizhi);
break;
}
}
fclose(fp);
return 0;
}