c - Vigenere Cipher Black Hawk Down -


i cannot figure out why thing doesn't scramble correctly. read other posts on cipher , far can tell i'm using exact same algorithm are...

the areas commented out tests tried make sure passing through correctly. believe goes through correctly fails in algorithm.

#include <stdio.h> #include <cs50.h> #include <string.h> #include <ctype.h> #include <stdlib.h>  string get_message(void); string scramble(string key, string message);  int main(int argc, string argv[]) {     if(argc == 2)     {         string key;         string message;          key = argv[1];          //printf("key: %s<<",key);          message = get_message();         scramble(key, message);     }     else     {         printf("please enter 2 arguments.\n");         return 1;     } }  string get_message(void) {        string message = "";         {         message = getstring();     }     while(strlen(message) < 1);     return message; }  string scramble(string key,string message) {            for(int = 0, len = strlen(message), key_len = strlen(key); < len; i++)     {            int letter = message[i];         //int tkey = atoi(key[i % key_len]);          //printf("key: %d<<\n",tkey);          if(islower(letter))         {             //printf("key(%d)",(key[i % key_len]-97));             letter = (((letter - 97) + (key[i % key_len])) % 26 + 97);             //printf("(%d)",(letter - 97) + (key[i % key_len])%26);             printf("%c",letter);         }                else if(isupper(letter))         {             //printf("(%d)", key[i]);             //printf("(%c)",letter); have correct letter             letter = (((letter - 65) + (key[i % key_len])) % 26 + 65);             printf("%c",letter);         }     }     printf("\n");     return 0; } 

i think calculation wrong:

you have

encryptedletter = (letter - firstletteroffset) + key[position % keylength] % 26 + firstletteroffset 

by check c operator precedence table notice % evaluated before - or +, meaning code mean :

encryptedletter = (letter - firstletteroffset) + ( key[position % keylength] % 26 ) + firstletteroffset 

where wanted :

encryptedletter = ( (letter - firstletteroffset) + key[position % keylength] ) % 26 + firstletteroffset 

conclusion : need put more parenthese specify in order evaluate expression.


in addition took letter number text character not key !

correct expression

encryptedletter = ( (letter - firstletteroffset) + key[position % keylength] - firstletteroffset ) % 26 + firstletteroffset 

demonstration in javascript


Comments

Popular posts from this blog

google chrome - Developer tools - How to inspect the elements which are added momentarily (by JQuery)? -

angularjs - Showing an empty as first option in select tag -

php - Cloud9 cloud IDE and CakePHP -