我的CS50凯撒问题代码有什么问题?

时间:2020-04-01 15:25:49

标签: c cs50

此问题旨在应用凯撒密码。目的是加密用户定义的消息。该问题要求我们使用命令提示符来获取密钥。收到消息和密钥后,我们必须通过移动密钥来加密每个字符。例如如果键是1,则A-B以及b-c和z-a,如果键是2,则a-c,D-F等。。。使用check50来检查我的代码,它看起来有很多错误,但输出是相同的...我只是不明白我的代码有什么问题。

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    for (int i = 0; argv[1][i] != '\0'; i++)
    {
        if (isalpha(argv[1][i]))
        {
            printf("Usage: ./caesar key\n");
             return 1;
        }
    }

    int key = atoi(argv[1]);

    string ptext;

    ptext = get_string("plaintext: ");

    printf("ciphertext: ");

    int n = strlen(ptext);

    for (int i = 0; i <= n; i++)
    {
        if (isupper(ptext[i]))
        {
            printf("%c", (((ptext[i] + key) - 65) % 26) + 65);
        }
        else if (islower(ptext[i]))
        {
            printf("%c", (((ptext[i] + key) - 97) % 26) + 97);
        }
        else
        {
            printf("%c", ptext[i]);
        }

    }
    printf("\n");

    return 0;
}

链接到check50 https://submit.cs50.io/check50/f7714d6b10c0b2e9fd1c1f01f4209195d8dc5163

1 个答案:

答案 0 :(得分:1)

您正在输出空终止符。

    int n = strlen(ptext);

    for (int i = 0; i <= n; i++)

您应该只循环到i < n