0

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

    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;
        }
    }
4

1 回答 1

2

我想ciphered_text是 achar[N]还是 a char*

失败的可能原因是

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

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

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

于 2012-11-16T12:41:11.253 回答