c - C中字符总和的问题

标签 c encryption char

我对 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声明为intunsigned char

关于c - C中字符总和的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939902/

相关文章:

在 Windows 中从纯 C 创建一个唯一的临时目录

c# - C# 与 C 函数互操作的性能损失

c++ - 按位操作的问题

java - JAVA GUI 中的复选框菜单项 Decrypt

c - atoi返回的值无法打印

C:为什么我的嵌套 if else 语句不起作用

android - 不应使用具有 ECB 模式的密码

使用 vs2013 对类进行 Python RSA 解密

C++ 连接字符串导致 "invalid operands of types ‘const char*’ 和 ‘const char"

c - 在C编程中将元素插入到动态字符数组中