title: Vigenere Cypher Program in C
body: <p>This program is supposed to crypt a certain message with the vigenere cypher. The program is supposed to be 'case sensitive' both the message and the keyword. If the program encounters any special characters or numbers, is also supposed to print them untouched.</p>
  
  <p>The last part seems to be working, and the rest, even though the math seems to be right, it doesn't print as it's supposed to. I'm also converting the ASCII values to A-Z/0-26, doing the cypher formula, and them converting them back to ASCII.</p>
  
  <pre><code>    // key validation
      string kw = argv[1];
      int kwl = strlen(kw);
      for (int i = 0; i &lt; kwl; i++)
      {
          if (!isalpha(kw[i]))
          {
              printf("Usage: ./vigenere keyword\n");
              return 1;
          }
      }
  
      // get message and length
      string mssg; 
      mssg = GetString();
      int lngth = strlen(mssg);
  
  
      // cryptography 
      int k = 0;
      for (int j = 0; j &lt; lngth; j++)
      {
          if (isalpha(mssg[j]))
          {
              if (islower(mssg[j]))
              {
                  if (islower(kw[k % kwl]))       
                      printf("%c", (((mssg[j] - 97) + (kw[k % kwl] - 97)) &amp; 26) + 97);
                  else
                      printf("%c", (((mssg[j] - 97) + (kw[k % kwl] - 65)) &amp; 26) + 97);
                  k++;
              }
              else if (isupper(mssg[j]))
              {
                  if (isupper(kw[k % kwl]))
                      printf("%c", (((mssg[j] - 65) + (kw[k % kwl] - 65)) &amp; 26) + 65);
                  else
                      printf("%c", (((mssg[j] - 65) + (kw[k % kwl] - 97)) &amp; 26) + 65);
                  k++;
              }
          }    
          else
              printf("%c", mssg[j]);
      }
  
      printf("\n");
  
      return 0;
  }
  </code></pre>