凯撒加密问题 c 请教大家哪里出错(凯撒密码加密公式怎么用不了)

2023-03-19 0:25:58 密码用途 思思

原因在于scanf读取choice时,你输入的那个回车符没有被读取。然后接下来的case里面,getchar()读取的字符就是那个害死人的回车符'\n'。这是个老问题了,呵呵。希望你能从这个问题里面领悟到scanf之类的函数的工作原理。其实他们就是一种将字符串转化为预定义数据的函数。用户输入总是字符串,不是吗?

好吧,还是我帮你打一下吧。

/* 2011-11-14, 10:37 , 被 hoxily 修改。

* 恺撒加密。

*/

#include stdio.h

int main(void)

{

int choice;

char ch;

printf("1.加密 2.解密 3.退出\n");

scanf("%d",choice);

/* 注意这里 */

getchar();

/* 读掉那个'\n'字符 */

switch(choice)

{

case 1:

printf("输入需加密的字符串(仅限a~z):");

ch=getchar();

while(ch!='\n')

{

/* if(ch='a' ch'z') */

/* 这句也不对,没有包含'z' */

if('a'=ch ch='z')

ch='a'+(ch-'a'+3)%26;

putchar(ch);

ch=getchar();

}

break;

case 2:

printf("输入需解密的字符串:");

ch=getchar();

while(ch!='\n')

{

/* if(ch='a' ch'z') */

/* 理由同上 */

if('a'=ch ch='z')

/* ch='a'+(ch-'a'-3)%26; */

/* 注意这里%运算要保证被除数是非负数 */

/* 你之前的写法,输入'a'进行解密,结果是'^' */

ch='a'+(ch-'a'-3+26)%26;/* 加上个模不影响%的结果 */

putchar(ch);

ch=getchar();

}

break;

}

return 0;

}

/*

测试结果:

1.加密 2.解密 3.退出

1

输入需加密的字符串(仅限a~z):abcdefghijklmnopqrstuvwxyzABCXYZ

defghijklmnopqrstuvwxyzabcABCXYZPress any key to continue

1.加密 2.解密 3.退出

2

输入需解密的字符串:defghijklmnopqrstuvwxyzabcABCXYZ

abcdefghijklmnopqrstuvwxyzABCXYZPress any key to continue

1.加密 2.解密 3.退出

3

Press any key to continue

*/

C语言凯撒加密问题

#includestdio.h

int main()

{

int n;

char a,b;

printf("Enter shift amount(1-25):");

scanf_s("%d",n);

getchar();

printf("Enter message to be encrypted:");

while((a=getchar())!='\n')

{

if(a='A' a='Z')

b='A'+(a-'A'+n)%26;

else if(a='a' a='z')

b='a'+(a-'a'+n)%26;

putchar(b);

}

return 0;

}

恺撒密码关于密钥到底怎么用 也就是恺撒密码2怎么给明文加密设置密匙,不要复制 要简单易懂的语言

恺撒密码最简单的那种就是将各个字母做一个简单的移位,复杂一些的恺撒密码2的话,就是对26个字母不是顺序的位移,而是不同的字母有不同的位移。这样的话,你就需要一个26个字母的密钥来给26个字母做加密和解密。

关于凯撒密码的一些问题

这个程序,允许输入一串小写英文,如:goodbey,然后将它们变成密码:jrrgehb。

变换规律是:按照英文字母表,明文字母向下第三个,就是密码。

见插图。

char M[100];               //明文、密码的存放空间

char C[100];

int K = 3, i;              //K=3, 向下第三个

printf("请输入明文M(注意不要输入空白串)\n");    //显示

gets(M);                  //输入

for(i=0;M[i]!='\0';i++)   //逐个字母进行变换

C[i]=(M[i]-'a'+K)%26+'a';    //加密计算公式

C[i]='\0';                     //密码末尾加上终止符号

printf("结果是:\n%s\n",C);     //显示密码