凯撒密码无法使用,无法弄清原因

时间:2020-06-02 22:19:38

标签: c cs50 caesar-cipher

我写了我的代码,看起来不错,但是关于它的某些功能却无法正常工作,我也不知道为什么。这是一个凯撒密码,但没有给我期望的输出

int main(int key, char* argv[])
{

key = atoi(argv[1]);
string ptext = get_string("plaintext: ");
int len = strlen(ptext);
printf("%s %i\n", ptext, key);`


    for (int i = 0; i < len; i++)
    {
        if (isalpha(ptext[i])){
            if (ptext[i] >= 'a' && ptext[i] <= 'z')
            {
                if (ptext[i] + key > 'z')
                {
                    printf("%c", 'a' + (key % 26)); //'a' is used to reset the ascii table so it use letters only
                }
                else{
                    printf("%c", ptext[i] + key);
                }
            if (ptext[i] >= 'A' && ptext[i] <= 'Z')
            {
                if (ptext[i] + key >= 'Z'){
                    printf("%c", (ptext[i] + (key % 26)) - 'z'); //'A' is used to reset the ascii table so it use letters only

                }
                else{
                    printf("%c", ptext[i] + key);
                }
                    }
            }
        else{
            printf("%c", ptext[i]);
        }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

orderValue = parseInt(rawValue.replace(/$\./, ""))时处理不正确。

ptext[i] + key > 'z'不依赖于'a' + (key % 26)

ptext[i]

相反

if (ptext[i] + key > 'z') {
  printf("%c", 'a' + (key % 26)); // Incorrect. 
} else {
  ....
}

int sum = (ptext[i] - 'a' + key)%26 + 'a'; printf("%c", sum); 类似。