在每个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;
}
}
答案 0 :(得分:2)
我认为ciphered_text
是char[N]
或char*
?
那可能是失败的原因
(int)(ciphered_text[arrayelement]) + shiftkey;
大于127,当它存储在char
(ciphered_element[arrayelement]
)中时,会转换为负值。 (注意:如果char
已签名,则将超出范围的值转换为char
是实现定义的。)
最简单的解决方法是将类型更改为unsigned char
。