(я попал сюда через http://codereview.stackexchange.com, поэтому я все еще в шапке для проверки кода).
С кодом, который манипулирует буквами, мне легче понять, если он использует реальные буквыв источнике, а не числовые коды.Поэтому я рекомендую изменить
cipher[i] += (shift - 25);
на что-то вроде
cipher[i] += (shift - ('Z' - 'A'));
Большинство людей, выполняющих шифры Цезаря, преобразуют только буквы и проходят через знаки препинания, числа, пробелы,и т.д. без изменений.Вы можете рассмотреть возможность включения стандартной библиотеки символов
#include <ctype.h>
и использования функций isalpha (), islower (), isupper () - в частности, изменение
if ((cipher[i]) >= 'A' && (cipher[i]) <= 'Z') {
на что-то вроде
if (isupper(cipher[i])) {
.