¿Por qué la resta funciona para el primero, pero no para el segundo?

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 .