c语言16位压缩成12位,C语言求解压缩与结压问题

#include

#include

int reduce(char *file_name); //压缩一个文件

int dell_fill(char *file1_name,char *file2_name);//删除两个文件

int re_file(char *file1_name,char *file2_name);//解压缩两个文件

void main()

{

char *file_name="E:\\file.txt";

reduce(file_name);

puts("\nend!");

getchar();

}

int reduce(char *file_name)

{

FILE *fp,*fp1,*fp2;

long fnum=0;

int f=0,f_h=1,flag,i;

char *file1_name,*file2_name;

if((fp=fopen(file_name,"rb"))==NULL)

{

printf("Open the \"%s\" error!",file_name);

getchar();

exit(1);

}

i=0;

flag=0;

do

{

if(file_name[i]=='.')

{

file1_name[i]='a';

file1_name[i+1]='.';

file2_name[i]='b';

file2_name[i+1]='.';

flag=1;

}

else

{

file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];

}

}while(file_name[i++]!=0);

if(!flag)

{

file1_name[i]='a';

file2_name[i]='b';

}

if((fp1=fopen(file1_name,"w+"))==NULL)

{

printf("Creat the \"%s\" error!",file1_name);

getchar();

exit(1);

}

if((fp2=fopen(file2_name,"w+"))==NULL)

{

printf("Creat the \"%s\" error!",file2_name);

getchar();

exit(1);

}

f_h=fgetc(fp);

while(f!=-1)

{

f=fgetc(fp);

if(f_h==f)

{

fnum++; //解除长整形限制

}

else

{

do

{

fputc(fnum%256,fp1);

fputc(f_h,fp2);

}while(fnum/=256);

fnum=0;

}

f_h=f;

}

fclose(fp);

fclose(fp1);

fclose(fp2);

re_file(file1_name,file2_name);

dell_fill(file1_name,file2_name);

return 0;

}

int dell_fill(char *file1_name,char *file2_name)

{

unlink(file1_name);

unlink(file2_name);

return 0;

}

int re_file(char *file1_name,char *file2_name)

{

FILE *fp,*fp1,*fp2;

int f=0,f_h,i,flag;

char *file_name;

if((fp1=fopen(file1_name,"rb"))==NULL)

{

printf("Creat the \"%s\" error!",file1_name);

getchar();

exit(1);

}

if((fp2=fopen(file2_name,"rb"))==NULL)

{

printf("Creat the \"%s\" error!",file2_name);

getchar();

exit(1);

}

i=0;

flag=0;

do

{

if(file1_name[i]=='.')

{

file_name[i-1]='.';

flag=-1;

}

else

file_name[i+flag]=file1_name[i];

}while(file1_name[i++]!=0);

if(!flag)

file_name[i-1]=0;

if((fp=fopen("E:\\file.txt","wt"))==NULL)

{

printf("Creat the \"%s\" error!",file_name);

getchar();

exit(1);

}

while(f!=-1)

{

f=fgetc(fp1);

f_h=fgetc(fp2);

for(i=0;i<=f;i++)

{

fputc(f_h,fp);

}

}

fclose(fp);

fclose(fp1);

fclose(fp2);

return 0;

}

这个是你的杰作,你可以作一点注释吗???

我看不懂,怎么运行结束以后就是一个end.这样什么都没有了,

也没有实现压缩和解压的功能,还有里面的

int dell_fill(char *file1_name,char *file2_name);//删除两个文件

int re_file(char *file1_name,char *file2_name);//解压缩两个文件

这两个函数好象没有用处,不起作用.......

分析一下好吗???你觉得我将怎样改才可以啊

还有这里看不明白

do

{

if(file_name[i]=='.')

{

file1_name[i]='a';

file1_name[i+1]='.';

file2_name[i]='b';

file2_name[i+1]='.';

flag=1;

}

else

{

file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];

}

}while(file_name[i++]!=0);

if(!flag)

{

file1_name[i]='a';

file2_name[i]='b';

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值