目录
简介:
给定任意数值偏移,将字母表中的A~Za~z0~9扩展为大循环,形成AB~Zab~z01~9AB~Z..为基础的链,用以进行映射,形成密文。
题目要求:
-
屏幕打印输出提示:输入偏移(允许负数)。
-
获得输入偏移。
-
屏幕打印输出提示:输入字符(允许大写字母、小写字母、数字、","、".")。
-
如果输入的不符合要求字符,提示并重新要求输入。
-
根据凯撒加密原理,将输入的字符映射为密文(“.”和“,”不变),打印输出。
-
要求循环输入,直到输入自定义的特殊符号为正(如遇到“\”为正)。
代码段:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE* fp;
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
int b,i,j=0;
char d;
char f;
void xieru(char e,int g)
{
fp=fopen("kk.txt","a");
fputc(e,fp);
fclose( fp );
}
void duchu()
{
fp=fopen("kk.txt","r");
while((f=fgetc(fp))!=EOF)
{
printf("%c",f);
}
fclose( fp );
}
int main()
{
fp=fopen("kk.txt","w");
fclose( fp );
printf("\n请输入偏移:");
scanf("%d",&b);
while(1)
{
printf("请输入字符:");
scanf(" %c",&d);
j++;
for(i=0;i<63;i++)
{
if(a[i]==d)
{
i=i+b;
if(i<0){for(;i<0;i+=62);}
if(i>=62){for(;i>=62;i-=62);}
d=a[i];
xieru(d,j);
break;
}
}
if(i==63)
{
switch(d)
{
case ',':xieru(',',j);continue;
case '.':xieru('.',j);continue;
case '\\':printf("结束输入\n");j--;break;
default:printf("输入错误");j--;continue;
}
}
else continue;
break;
}
duchu();
return 0;
}
上机演示: