2016-10-11 13 views
-5

Cでcasear暗号を使用してメッセージを暗号化しようとしていますが、メッセージに「z」という文字が見つかりました。文字 'a'( - = 25)でも、文字 'a'には戻りません。文字 'b'に戻ります。どんなコメントも高く評価されます。ここに私のコード.........casear暗号化の暗号化で 'z'から 'a'に戻る方法

void casear_cipher(char *message); 
int main() 
{ 
    char message[] = "Todayzzz is Tuesday"; 
    printf("Original Message is : '%s'\n", message); 

    casear_cipher(message); 

    printf("Encrypted Message is: '%s'\n", message); 
} 

void casear_cipher(char *message) 
{ 
    int i; 
    int message_length = strlen(message); 
    for(i = 0; i<message_length; i++) 
    { 
     if(message[i] == 'z' || message[i] == 'Z') 
     { 
      message[i] -= 25; //<-------------------------Problem is here 
     } 

     if((message[i] >= 'a' && message[i] <= 'z') || (message[i] >= 'A' && message[i] <= 'Z')) 
     { 
      message[i] += KEY; 
     } 
    } 
} 
+1

'ctypes.h' – Olaf

+0

@Olafで快適になってください。 OPの問題を解決するとは思えませんが、一般的には良いアドバイスです。 –

+2

@MadPhysicist:コメントは回答できません。 – Olaf

答えて

1

あなたが得ることはありません「」あなたは、第二ifはまだ実行されるためです。最初のifは値をAまたはaに変更し、2番目のifKEYの値を追加します。私はあなたがより多くのこのかかわらような何かをしたいと思います

if(message[i] == 'z' || message[i] == 'Z') 
{ 
    message[i] -= 25; 
} 

else if((message[i] >= 'a' && message[i] <= 'z') || (message[i] >= 'A' && message[i] <= 'Z')) 
{ 
    message[i] += KEY; 
} 

if((message[i] >= ('z' - KEY + 1) && message[i] <= 'z') || (message[i] > (('Z' - KEY + 1)) && message[i] < 'Z')) 
{ 
    message[i] -= 26; 
    message[i] += KEY; 
} 

else if((message[i] >= 'a' && message[i] <= 'u') || (message[i] >= 'A' && message[i] <= 'U')) 
{ 
    message[i] += KEY; 
} 

そのように、あなたはすべてのzになるとZは、あなたがこのようなelse ifにこれを変更するになりたい場合は任意の値がZまたはzを過ぎるたびに、それはアルファベットの先頭から始まります。

+0

'message [i]> = 'v''にどうやって来ますか?例えばKEYが17の場合はどうなるでしょうか? – mch

+0

私の悪い私が投稿したときにそれを変更するのを忘れてダミーのキーを作った。私は編集します。 – duncan

+0

ありがとう、本当に助かりました。 – Neloy