为什么减法适用于第一个但不是第二个?

时间:2012-11-16 12:35:46

标签: c

在每个if语句的最后一行,'ciphered_text'中的当前数组元素从中减去了26。但是,这似乎只适用于第一部分而不是第二部分。谁能明白为什么?顺便说一句,任何人都可以告诉我,如果在这里,我是否应该使用其他。感谢。

    for(arrayelement = 0; arrayelement < size; arrayelement++)
    {
        ciphered_text[arrayelement] = (plain_text[arrayelement]);
        if ((int)(ciphered_text[arrayelement]) >= 65 && (int)(ciphered_text[arrayelement]) <= 90)
        {
            ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) + shiftkey;
            if (ciphered_text[arrayelement] > 90)
                ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) - 26;

        }

else if ((int)(ciphered_text[arrayelement])  >= 97 && (int)(ciphered_text[arrayelement]) <= 122)
        {
            ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) + shiftkey;
            if (ciphered_text[arrayelement] > 122)
                ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) - 26;
        }
    }

1 个答案:

答案 0 :(得分:2)

我认为ciphered_textchar[N]char*

那可能是失败的原因

(int)(ciphered_text[arrayelement]) + shiftkey;

大于127,当它存储在charciphered_element[arrayelement])中时,会转换为负值。 (注意:如果char已签名,则将超出范围的值转换为char是实现定义的。)

最简单的解决方法是将类型更改为unsigned char