-1

これは 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]);
    }            
}
4

1 に答える 1