1. 问题
请问putchar(‘a’ + (ch - ‘a’+3)%26); 是什么意思啊,换算成整型来计算的话,(ch-‘a’+3)怎么都不可能打过26把,求余以后不是0就是1再加上’a’怎么可能做到向后偏移两位的,这是为什么啊?求大佬指点!!!
#include <stdio.h>
int main()
{
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n')
{
if (ch >= 'a' && ch <= 'z')
{
putchar('a' + (ch - 'a' + 3) % 26);
continue;
}
if (ch >= 'A' && ch <= 'Z')
{
putchar('A' + (ch - 'A' + 3) % 26);
continue;
}
putchar(ch);
}
putchar('\n');
return 0;
}
2. 回答
首先,(ch - ‘a’+3)%26)这个表达式的结果不只是0和1;
对26取余,结果为0-25之间的任何一个数;
2.至于(‘a’ + (ch - ‘a’+3)%26)这个怎么计算,那么咱们简单的举个例子:
就已简单的字符ch = ‘ a ’为例;
带入(‘a’ + (ch - ‘a’+3)%26) = ‘a’ +(‘a’ - ‘a’ + 3)%26 = ‘a’ +3%26 = ‘a’ + 3
结果是 “a”+ 3 ,在编译器中这个计算就是用‘a’的ASCII码值+3;得到的数值在对照ASCII表转换为字符型的值;
当然咱们不用这么费事:这次从a向后数3个字符就行:
b、c、b,所以结果就是‘d’
综上:经过程序,把输入的‘a’变成了‘d’;
同理:输入其他的也一样:就是往后面数偏移多少位就行;