请各位大侠为我解释一下下面程序中代码的含义,小弟初学C语言,要做实验,要求每行要有注释,希望大侠相助

#include<stdio.h>#include<stdlib.h>#include<conio.h>intcompess(FILE*fsrc,FILE*fdest,i... #include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int compess(FILE *fsrc, FILE *fdest, int n)/*压缩函数buf[]用来存储写入字符的数组,ch[]用来存储压缩和被压缩后的数组。*/
{
char buf[128], ch[256];
int count, num;
int i, j, k;

if (NULL == fsrc || NULL == fdest)
{
printf("参数错误,压缩失败!\n");
return -1;
}

while (0 != (num = fread(buf, 1, 128, fsrc)))
{
for (i = 0, j = 0; i < num; i++, j++)
{
if (buf[i] == ' ' && buf[i + 1] == ' ')
{
count = 0;
while (buf[i++] == ' ')
count++;
i -= 2;
ch[j] = '&';

for (k = 100; k > 0; k /= 10)
{
if (count / k != 0) ch[++j] = count / k + 48; /*转换数字字符和数字j记录要被压缩空格的最前面一个空格的位置,而j++则表示被压缩空格的最后一个空格的位置,并通过语句ch[++j] = count / k + 48;将这个位置上的空格的内容改为空格的个数。*/
count %= k;
}
}
else
{
ch[j] = buf[i];

if (buf[i] == '&')//将第一个空格的内容改为&
ch[++j] = '&';
}
}

fwrite(ch, 1, j, fdest);
}

return 0;
}
int restore(FILE *fsrc, FILE *fdest, int n)//解压缩函数
{
char buf[128], ch[256];
int num;
int i, j, k;

if (NULL == fsrc || NULL == fdest)
{
printf("参数错误,还原失败!\n");
return -1;
}

while (0 != (num = fread(buf, 1, 128, fsrc)))
{
for (i = 0, j = 0; i < num; i++, j++)
{
if (buf[i] == '&' && buf[i + 1] != '&')
{
i++;
for (k = 0; k < buf[i] - 48; k++)
ch[j++] = ' ';
j--;
}
else
{
ch[j] = buf[i];
if (buf[i] == '&')
i++;
}
}

fwrite(ch, 1, j, fdest);
}
return 0;
}

void menu()//菜单函数
{
int n=0,sel;
FILE *fp, *fp1;
char ch, buf[128];
char str[][16] ={"压缩", "解压"};
typedef int (*pfun)(FILE*, FILE*, int);//函数指针
pfun func[] = {compess, restore};

LOOP:
printf(" ****************************\n");
printf("1.压缩\n");
printf("2.解压缩\n");
printf("3.退出\n");
printf(" ****************************\n");
printf("\n选择要执行的操作:");
scanf("%d", &sel);
getchar();
if (sel >= 1 && sel <= 2)
{
INPUT:
printf(" 输入%s文件的名字:", str[sel - 1]);
gets(buf);
fp = fopen(buf, "r");
if (NULL == fp)
{
printf("输入的文件名有误,重新");
goto INPUT;
}
printf(" 输入%s后文件的名字:", str[sel - 1]);
gets(buf);
fp1 = fopen(buf, "w");
if (NULL == fp)
{
printf("打开文件失败,退成程序!\n");
fclose(fp);
return;
}
(*func[sel - 1])(fp, fp1, n);

fclose(fp);
fclose(fp1);
}
else if (sel == 3)
return;
else
{
printf(" 选择错误,重新选择\n");
goto LOOP;
}
printf("完成操作,继续?(y/n)");
ch = getchar();
if (ch == 'y' || ch == 'Y')
goto LOOP;

}
int main()//主函数
{
menu();
return 0;
}
展开
 我来答
qi171078393
2012-03-01 · TA获得超过882个赞
知道小有建树答主
回答量:345
采纳率:0%
帮助的人:566万
展开全部
楼主不是学习PHP吧这个东西不有指针太蛋疼了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuqiang890026
2011-11-30 · TA获得超过3473个赞
知道大有可为答主
回答量:1992
采纳率:33%
帮助的人:1601万
展开全部
这还是初学么//水平比我高
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-12-06
展开全部
代码能不能规范一下呢?全不是左对齐看着好难受。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
303217675
2012-03-01
知道答主
回答量:33
采纳率:0%
帮助的人:7.9万
展开全部
qq
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式