これは cs50 用の Vigenere サイファーです。初めてのコーディングで、これを 1 週間行っていますが、ループが初めて終了した後、最初の文字を印刷できないようです。
例えば:
jharvard@appliance (~/Dropbox): ./viginere abcde あなたの鍵はabcde テキストを入力してください: あああああああああああああああああああああああ abcde bcde bcdebc debcde
最初a
は印刷されますが、次に開始さb
れ、最終的にすべての文字が印刷されるわけではありません。キーはユーザーが選択します。
何が間違っているのかわかりません。
for (int i = 0, j = strlen(plain_text), l = 0; i < j; i++)
{
int rotation_1 = (tolower(plain_text[i]) + (key[l] - 97)) % 122;
int rotation_2 = (plain_text[i] + (key[l] - 97)) % 122;
//if it is a letter
if (isalpha(plain_text[i]))
{
l = l % strlen(key);
//if the it is uppercase
if (isupper(plain_text[i]))
{
printf("%c", toupper(rotation_1));
}
//else if it is lowercase
else
{
printf("%c", rotation_2);
}
l++;
}
// if it is not a letter we print it as it is
else
{
printf("%c", plain_text[i]);
}
}