cs50 pset2 caesar ---密文错误

问题描述 投票:0回答:1

我已经解决了验证问题,但是现在我只得到了一个字符串作为密文,却找不到问题。这可能只是我所缺少的一点,但我们会提供任何帮助。顶部是我的终端窗口,底部是我的代码。

~/caesar/ $ make caesar
clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    caesar.c  -lcrypt -lcs50 -lm -o caesar
~/caesar/ $ ./caesar 12
plaintext: "world, say hello!"
ciphertext: aaaaaaaaaaaaaaaaaaa 




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

int main(int argc, string argv[])
{
    if(argc == 2)
    {
        int n = strlen(argv[1]);
        int i = 0;
        for(i = 0; i < n; i++)
        {
            if(!isdigit(argv[1][i]))
            {
                printf("Usage: ./caesar key\n");
                return 1;
            }
        }
        int key = atoi(argv[1]);
         string text = get_string("plaintext: ");
            printf("ciphertext: ");
            int l = 0;
            int t = strlen(text);
        for(l = 0; l < t; l++)
         {
            if(isupper(text[i]))
            {
                printf("%c", (((text[i] - 'A') + key) % 26) + 'A');
            }

            else if(islower(text[i]))
            {
                printf("%c", (((text[i] - 'a') + key) % 26) + 'a');
            }

            else
            {
                printf("%c", text[i]);
            }
        }
    }
     else
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }
    printf("\n");
    return 0;
}
c cs50
1个回答
1
投票

您一直在测试文本[i]而不增加i,您应该测试文本[l]

int main(int argc, string argv[])
{
    if(argc == 2)
    {
        int n = strlen(argv[1]);
        int i = 0;
        for(int l = 0; l < n; l++)
        {
            if(!isdigit(argv[1][l]))
            {
                printf("Usage: ./caesar key\n");
                return 1;
            }
        }
        int key = atoi(argv[1]);
         string text = get_string("plaintext: ");
            printf("ciphertext: ");
            int t = strlen(text);
        for(int l = 0; l < t; l++)
         {
            if(isupper(text[l]))
            {
                printf("%c", (((text[l] - 'A') + key) % 26) + 'A');
            }

            else if(islower(text[l]))
            {
                printf("%c", (((text[l] - 'a') + key) % 26) + 'a');
            }

            else
            {
                printf("%c", text[l]);
            }
        }
    }
     else
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }
    printf("\n");
    return 0;
}

此代码更干净。

© www.soinside.com 2019 - 2024. All rights reserved.