Оператор «%» имеет более высокий приоритет, чем «+». Следовательно, он применяется сначала к результату выражения offset % 26
, а затем добавляется к OriginalText[i]
.
. Чтобы исправить это, необходимо добавить еще пару скобок в присваивании шифру:
cipher = (((int)OriginalText[i] + (offset % 26)) % -26);
Более того, когда вы имеете дело с символами ASCII, просто для того, чтобы обойти безопасность и предотвратить надоедливые и нежелательные ошибки, вы должны рассматривать ваш ввод / вывод как неподписанный символ, следовательно:
unsigned char cipher;
unsigned char encrypt;
...
cipher = ((OriginalText[i] + (offset % 26)) % 26);
encrypt = cipher;