このサイトとプログラミングは初めてです。このトピックに関する以前の質問に目を通し、いくつかの修正を試みましたが、同じ問題が引き続き発生します。
私のプログラムは正常に動作し、文字「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;
}