为什么要这个样子写呢

为什么要写 c1=(c1-'a'+3)%26+'a';而不直接写c1=c1+3;呢


if(c1>='a'&& c1<='z')
      c1=(c1-'a'+3)%26+'a';
    
    if(c2>='a'&& c2<='z')
      c2=(c2-'a'+3)%26+'a';
   
    if(c3>='a'&& c3<='z')
      c3=(c3-'a'+3)%26+'a';
   
    if(c4>='a'&& c4<='z')
      c4=(c4-'a'+3)%26+'a';
  
    
    if(c5>='a'&& c5<='z')
      c5=(c5-'a'+3)%26+'a';
  
    printf("%c%c%c%c%c",c1,c2,c3,c4,c5);
    return 0;
}

比如c1 = 'z' ,你c1 = c1 + 3的话,就不是字符了啊。所以要循环,'z'要变成'c'。

用c1='y' 代入运算下,c1 = c1 + 3 = 'y' + 3 = 121 + 3 =124 ,ASCII 值为124的字符是 ‘|’ ,已经不是英文字符了。

这样可以保证所得结果依然在a到z的范围内,如果是c1=c1+3的话,当c1=x,y,z时就超出了a到z的范围