2012-11-16 69 views
0

在每条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

第二次发生了什么?您应该尝试调试此代码。你很难用你的代码片段来帮助你,你应该提供一个编译的例子。 – Kai

+1

@ user1827332 - 请不要删除原始问题的巨大卡盘。人们可能希望看到它,现在答案没有任何意义。只要把*编辑*并添加到原来的问题。通过一切手段纠正错别字。 –

+0

@ user1827332 - 将原始问题提供给您。只需接受一个答案。 –

回答

2

我想ciphered_textchar[N]char*

失败的可能的原因是那么

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

大于127,并且当存储在一个charciphered_element[arrayelement]),它被转换为负值。 (注:外的范围内的值转换为char是实现定义如果char被签名。)

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

+0

虽然它适用于最上面的一个,但所有不同的是,第二个字符的ascii值如果高于字符小写 – user1827332

+0

确定它正在将ciphered_text更改为无符号字符 – user1827332

+0

是的,而值'shiftKey'从来没有足够大,导致较小的值溢出,显然,@ user1827332。 –

相关问题