【发布时间】:2019-02-01 05:37:00
【问题描述】:
我正在尝试编写一个凯撒密码程序,该程序接受一个参数,将其转换为一个整数,并使用它来将字母沿某个方向移动(正数将其向前移动,负数将其向后移动。所以到目前为止,所有程序都适用于所有正数,但不适用于负数。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int encrypt(int character, int shift);
int main(int argc, char * argv[]) {
int shift = atoi(argv[1]);
if (shift >= 26) {
shift = ((shift + 26) % 26);
}
int character = getchar();
while (character != EOF) {
int new_character = encrypt(character, shift);
putchar(new_character);
character = getchar();
}
return 0;
}
int encrypt(int character, int shift) {
int ch = character;
int negShift = shift;
if (ch >= 'a' && ch <= 'z') {
ch = ch + shift;
if (ch > 'z') {
ch = ch - 'z' + 'a' - 1;
}
} else if (ch >= 'A' && ch <= 'Z') {
ch = ch + shift;
if (ch > 'Z') {
ch = ch - 'Z' + 'A' - 1;
}
}
return ch;
}
【问题讨论】:
-
当
shift为负数时,需要检查if (ch < 'a')...
标签: c negative-number caesar-cipher