我是大一学生,求大佬解读一下?

#include
#include
void code(char*p,int key)
{
printf("输入密钥:");
scanf("%d",&key);
while(*p!='\0')
{
p=*p+key;
p++;
}
}
void uncode(char*p,int key)
{
printf("输入密钥:");
scanf("%d",&key);
while(*p!='\0')
{
*p=*p-key;
p++;
}
}
main()
{
FILE *P;
char str[100];
int n,key;
for(;;)
{
printf("
*1,加密***2,解密***3,退出**:");
scanf("%d",&n);
P=fopen("e:\A.txt","R");
fgets(str,100,P);
fclose(P);
if(n==1)
{
P=fopen("e:\A.txt","W");
code(str,key);
printf("密文为%s\n",str);
fprintf(P,"%s",str);
fclose(P);
}
else
{
if(n=2)
{
P=fopen("e:\A.txt","W");
uncode(str,key);
printf("原文为%s\n",str);
fprintf(P,"%s",str);
fclose(P);
}
else
if(n==3);
exit(0);
}
}
return 0;
}

void code(char*p,int key)//定义了一个指针类型的函数
{
printf("输入密钥:");//提示
scanf("%d",&key);//输入的是整数性,赋值给key
while(*p!='\0')//*p表示指针的值,也就是循环值不为空
{
p=*p+key;//这里会报错,赋值时将整数赋值给指针,未作类型转换。第一个p前面少了一个
*号,应该要把值给指针的指而不是给指针的地址。
p++;//地址加加,就是循环下一个地址
}
}
void uncode(char*p,int key)
{
printf("输入密钥:");
scanf("%d",&key);
while(*p!='\0')
{
p=*p-key;
p++;
}
}
main()
{
FILE *P;//如果想接收到文件的返回值就得定义一个file类型指针来接收
char str[100];
int n,key;
for(;;)
{
printf("*1,加密
**2,解密***3,退出**:");//这是一个类似菜单的功能选择,输入n为
多少就执行那部分内容
scanf("%d",&n);
P=fopen("e:\A.txt","R");//这里应该是改成两个\一个的话表是转义,两个才是指定路径
,打开路径下的文件,给定权限r

fgets(str,100,P);//从键盘获取100个以内的字符,写进P
fclose(P);//如果执行成功了,则要关闭下文件,将缓存区里的内容保存进文件里
if(n==1)//不是2,3执行1
{
P=fopen("e:\A.txt","W");//这里也一样
printf("密文为%s\n",str);
fprintf(P,"%s",str);
fclose(P);
}
else
{
if(n=2)//不是1,3执行2
{
P=fopen("e:\A.txt","W");//这里也是
uncode(str,key);
printf("原文为%s\n",str);
fprintf(P,"%s",str);
fclose(P);
}
else
if(n==3);//不是1,2执行3
exit(0);//退出程序
}
}
return 0;
}