Board logo

标题: playfair密码的一个问题 [打印本页]

作者: x86    时间: 2005-9-20 23:11     标题: playfair密码的一个问题

郁闷中... 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; }
作者: x86    时间: 2005-9-20 23:31     标题: playfair密码的一个问题

错误找到了,,该死的文件结束标志
if (!feof(fpin))
  temp2=fgetc(fpin);
else temp2=';x';;
改成:
while(temp1=fgetc(fpin),!feof(fpin))
{temp2=fgetc(fpin);
if(feof(fpin))
{temp2=';x';;
printf("x替代了结尾!\n");
}





欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2