我对 C 很陌生,所以我会快速完成:我正在制作凯撒密码,但在某些时候它开始给我?符号。
#include <stdio.h>
#include <ctype.h>
int main(void){
char c;
int k;
printf("Inserisci la chiave di cifratura: ");
scanf("%d", &k);
if (k > 26)
k = (k%26);
printf("%d", k);
while ((c=getchar()) != '.') {
if (isalpha(c)) {
if (c >= 'a' && c <= 'z') {
c = c + k;
if (c > 'z') {
c = c - 'z' + 'a' - 1;
}
}
else if (c >= 'A' && c <= 'Z') {
c = c + k;
if (c > 'Z') {
c = c - 'Z' + 'A' - 1;
}
}
putchar(c);
}
else
putchar(c);
}
printf("\n");
return 0;
}
如果 k 是 6,它就会开始给我带有 z 的符号。 如果是7,则以y开头。 等等...
我找不到任何东西,谢谢帮助我的人。
最佳答案
当您使用char
时,无论将其视为signed char
还是unsigned char
,它都是实现定义的。您的实现显然默认为 signed char
。 'z'
的值为 122
,当您添加 6
时,您会得到 128
,该值会溢出并导致未定义的行为。 signed char
的最大值为 127
。
您应该将c
声明为int
或unsigned char
。
关于c - C中字符总和的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939902/