郁闷中...
c语言的文件处理真的是让人很晕,有人能帮我看看这个代码的错误么?
在处理abcdefg窜时,结果会是bhdimpel,最后2个是错误的!!!
#include
#include
#include
void usage(int argc );
int getx(char c);
int gety(char c);
char box[5][5]={';p'; , ';l'; , ';a'; , ';y'; , ';f';,
';i'; , ';r'; , ';b'; , ';c'; , ';d';,
';e'; , ';g'; , ';h'; , ';k'; , ';m';,
';n'; , ';o'; , ';q'; , ';s'; , ';t';,
';u'; , ';v'; , ';w'; , ';x'; , ';z';
};
void main(int argc , char *argv[])
{
usage(argc);
FILE *fpin,*fpout;
char temp1 , temp2 ,out1 , out2;
int firstx , firsty ,secondx , secondy;
if((fpin=fopen(argv[1],"rb"))==NULL)
{printf("%s open failed!\n",argv[1]);
exit(0);
}
if((fpout=fopen(argv[2],"wb"))==NULL)
{printf("%s create failed!\n",argv[2]);
exit(0);
}
while(temp1=fgetc(fpin),!feof(fpin))
{
if (!feof(fpin))
temp2=fgetc(fpin);
else temp2=';x';;
if(temp1==temp2)
{fseek(fpin,-1L,1);
temp2=';x';;
}
if(temp1==';j';)
temp1=';i';;
if(temp2==';j';)
temp2=';i';;
firstx=getx(temp1);
firsty=gety(temp1);
secondx=getx(temp2);
secondy=gety(temp2);
if(firstx==secondx)
{out1=box[firstx][((firsty+6)%5)];
out2=box[firstx][((secondy+6)%5)];
}
else if(firsty==secondy)
{out1=box[((firstx+1)%5)][firsty];
out2=box[((secondx+1)%5)][firsty];
}
else
{
out1=box[firstx][secondy];
out2=box[secondx][firsty];
}
fputc(out1,fpout);
fputc(out2,fpout);
}
printf("ok!\n");
fclose(fpin);
fclose(fpout);
}
void usage(int argc )
{if(argc!=3)
{printf("usage: playfair sourcefile destfile\n");
exit(0);
}
}
int getx(char c)
{int k=0;
for(int i=0;i<5;i++)
{for(int j=0;j<5;j++)
if(box[j]==c)
k=i;
}
return k;
}
int gety(char c)
{int k=0;
int j;
for(int i=0;i<5;i++)
{for(j=0;j<5;j++)
if(box[j]==c)
k=j;
}
return k;
} |