-1

このサイトとプログラミングは初めてです。このトピックに関する以前の質問に目を通し、いくつかの修正を試みましたが、同じ問題が引き続き発生します。

私のプログラムは正常に動作し、文字「B」または「b」を除いて、期待どおりの出力が得られます。他のすべての文字は、必要に応じて暗号化します。どこで私は間違えましたか?

編集 - 「公園で会いましょう」というメッセージを「bacon」のキーで暗号化すると、次のようになります: Negh zf av huf pcfx. 代わりに次のようになります: Tegh zf av huf pcfx

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

int main(int argc, string argv[])
{
    //Get key in commandline argument.  Prompt until key is given.
    string key = argv[1];
    int key_length = strlen(key);

    if (argc != 2)
    {
        printf("Invalid command. Please specify key.");
        return 1;
    }
    //Make sure only alphabetical chars are used in key.
    for (int i = 0; i < key_length; i++)
    {
        if (!isalpha(key[i]))
        {
        printf("Invalid command. Please specify key.");
        return 1;
        }
    }

    //Get message to be encrypted
    string plain = GetString();

    for (int i = 0, j = 0; i < strlen(plain); i++)
    {
        if (isalpha(plain[i]))
        {
            if (isupper(plain[i]))
            {
                plain[i] = (((plain[i] - 65) + (key[j%key_length] - 65)) % 26) + 65;
                j++;
            }
            else
            {
                if (islower(plain[i]))
                {
                plain[i] = (((plain[i] - 97) + (key[j%key_length] - 97)) % 26) + 97;
                j++;
                }
            }
        }
    }
    printf("%s\n", plain);
    return 0;
}
4

2 に答える 2