2016-03-25 19 views
-4

Programım, BaZ'ın bir komut satırı girdisini ve BaRFoo'nun bir girdisini girdiğim durumlar dışında iyi çalışıyor. Program CaQGon olarak şifrelemeli, bunun yerine CaQGoh çıktılar. Bunun neden olduğu konusunda gerçekten kafam karıştı çünkü program diğer anahtar ve girdiler için iyi çalışıyor. Çalışmıyor sadece bu özel kombinasyon. BTW, programımın vigenere şifresini kullanarak şifrelemesi gerekiyor.Program çalışıyor ancak 1 adet hata var

#include <stdio.h> 
#include <cs50.h> 
#include <string.h> 
#include <ctype.h> 
#include <stdlib.h> 

string input; 
int digitnum = 0; 
string keyInput; 

int main(int argc, string argv[]) 
{ 
    keyInput = argv[1]; 

    if (argc>2 || argc<2) 
    { 
     printf("Please enter a valid argument.n"); 
     return 1; 
    } 

    for (int n = 0, keylength = strlen(argv[1]); n < keylength; n++) 
    { 
     if ((keyInput[n] >= '0') && (keyInput[n] <= '9')) 
     { 
      printf("Please enter an alphabetical keyword."); 
      return 1; 
     } 
    } 

    input = GetString(); 

    for (int i = 0; i < strlen(input); i++) 
    { 
     char c = input[i]; 

     if (isalpha(input[i])) 
     { 
      char currentletter = input[i]; 
      int letternum = currentletter; 
      char currentkey = keyInput[digitnum]; 
      int currentkeynum = currentkey; 

      if(isupper(c)) 
      { 
       int upper = 'A'; 
       int alphanum = letternum - upper; 
       int key = currentkeynum - upper; 
       int newint = (alphanum + key) % 26; 
       newint = newint + upper; 
       char newchar = newint; 
       printf("%c", newchar); 
      } 
      if(islower(c)) 
      { 
       int lower = 'a'; 
       int alphanum = letternum - lower; 
       int key = currentkeynum - lower; 
       int newint = (alphanum + key) % 26; 
       newint = newint + lower; 
       char newchar = newint; 
       printf("%c", newchar); 
      } 

      digitnum = digitnum + 1; 

      if (digitnum >= strlen(keyInput)) 
      { 
       digitnum = 0; 
      } 
     } 
     else 
     { 
      printf("%c", input[i]); 
     } 
    } 
    printf("\n"); 
} 
+4

'Bu, işe yaramayan belirli bir kombinasyon' - BÜYÜK! O zaman, hata ayıklayıcınızla sorunu izlemeniz için gerçekten kolay olmalı. –

+0

Olası bir sadeleştirme ipucu: 'Isupper 've' islower' dallarındaki kod tamamen aynı olduğundan, 'üst' ve 'alt' değişkenleri hariç, neden ortak bir değişkene sahip değilsiniz? 'A '' veya ''' 've bunun yerine tek bir değişken kullanın? Daha az kod-çoğaltma daha iyi. –

+0

Bu arada, 'string' nedir? 'GetString' ne yapar? 'Isupper'/'islower' çağrıları dışında' c' değişkeninin döngüde kullanımı nedir? –

cevap

0

Bu çizgi currentkeynum büyük olduğunda

int key = currentkeynum - lower; 

başarısız olur, sen kontrol gitmeyen bir şey. Kodunuz sadece anahtar ve mesaj harflerinin her ikisi de aynı durumda olduğunda çalışır.

Input: BaRFoo 
Key: BaZBaZ 

Son harfe ulaşıncaya kadar harfleri eşleştirdiklerini görebilirsiniz.

İlgili konular