C 解密程序中使用负数模的问题

C 解密程序中使用负数模的问题,c,encryption,C,Encryption,我对C比较陌生,最近一直在做一个简单的加密/解密程序。我成功地得到了加密,但我遇到了解密的障碍 有关守则如下: 加密(其中asciinum是字母的ascii值,k是要移位的“vigenere”密钥) //按键移动小写字母 如果(asciinum>=97&&asciinum=65&&asciinum而不是使用asciinum%26,则使用(asciinum+26)%26,这将使您在正数上使用模,而在整个循环中每次都要额外添加一个值。在C99 C之前的版本中,%对于负数的行为是实现定义的。在C99以

我对C比较陌生,最近一直在做一个简单的加密/解密程序。我成功地得到了加密,但我遇到了解密的障碍

有关守则如下:

加密(其中asciinum是字母的ascii值,k是要移位的“vigenere”密钥)

//按键移动小写字母

如果(asciinum>=97&&asciinum=65&&asciinum而不是使用
asciinum%26
,则使用
(asciinum+26)%26
,这将使您在正数上使用模,而在整个循环中每次都要额外添加一个值。

在C99 C之前的版本中,
%
对于负数的行为是实现定义的。在C99以后的版本中,它是定义的,但不是您想要的

最简单的解决方法是:

((asciinum + 26) % 26)
假设
ascinum
永远不会低于-26

    //shifts uppercase letters by key
    if (asciinum >= 65 && asciinum <= 91)
    {
        f = p % keylen;
        k = key[f];
        asciinum = (asciinum - 65) - k;
        asciinum = (asciinum % 26) + 65;
        letterc = (char) asciinum;
        cipher[j] = letterc;
        p++;
    }
((asciinum + 26) % 26)