我在写一个凯撒密码,它将数组中每个字符的值移位一个固定的量。我遇到的问题是字符串后面的字符值也在移位。 我希望完全忽略这些值/不打印它们。
必须 取这些精确的参数,所以我不能将长度也传递给它。
#include <stdio.h> void encrypt(char *message, int shift); int main(void) { int shift_amount; int length; char message[80]; char c; printf("Enter message to be encrypted: "); for (length = 0; ( c = getchar()) != '\n'; length++) { message[length] = c; } printf("Enter shift amount (1-25): "); scanf("%d", &shift_amount); encrypt(message, 3); return 0; } void encrypt(char *message, int shift){ printf("Encrypted message: "); for (int i = 0; i < 80; i++) { char ch = message[i]; if (message[i] >= 'a' && message[i] <= 'z') { ch = (( ch - 'a' ) + shift) % 26 + 'a'; } else if (message[i] >= 'A' && message[i] <= 'Z') { ch = (( ch - 'A' ) + shift) % 26 + 'A'; } printf("%c", ch); } printf("\n"); }
理想的输入/输出示例如下:
输入:“继续,做我的一天。”3班
输出:“Jr dkhdg,pdnh pb gdb。”
非常感谢。
与其只修改80个字符,不如在到达字符串末尾时停止。你怎么知道字符串的结尾是什么时候?因为字符串结束后的第一个字符将是字符串终止符,即。 '\0'
'\0'
在代码中,可以通过替换 for 条件,从 i<80 message[i] != '\0' ,或者如果要指定最大长度,请同时使用这两个条件。
for
i<80
message[i] != '\0'
printf("Enter message to be encrypted: "); for (length = 0; ( c = getchar()) != '\n'; length++) { message[length] = c; } message[length] = '\0'; // <- add this here