En la última línea de cada instrucción if, el elemento de la matriz actual en ‘ciphered_text’ ha sido sustraído 26 de él. Sin embargo, esto solo parece estar funcionando para la primera sección y no en la segunda. ¿Alguien puede ver por qué? Aparte de eso, alguien puede decirme si debo usar otra cosa si o aquí. Gracias.
for(arrayelement = 0; arrayelement = 65 && (int)(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]) - 26; } }
Supongo que ciphered_text
es un char[N]
o un char*
?
La causa probable del fracaso es entonces que
(int)(ciphered_text[arrayelement]) + shiftkey;
es mayor que 127, y cuando se almacena en un char
( ciphered_element[arrayelement]
), se convierte a un valor negativo. (Nota: la conversión de los valores fuera de rango a char
está definida por la implementación si se firma char
).
La solución más sencilla sería cambiar el tipo a unsigned char
.