2014-10-16 108 views
3

此代码的目的是创建一个凯撒密码,只用3个键编码字母数字字符,其中第一个字母由第一个键递增,第二个字符由第二个键递增,第三个字符为(Z + 1 - > a),(a - 1 - > Z)的第一个键,第三个键,第四个字符等。凯撒密码问题(C)

我完全完成了作业,唯一的问题是我的负面环绕不起作用(a - 1 - > Z)。它要求输入密钥,接受输入,然后不返回任何内容(但仍然允许用户输入并按回车键而不带任何结果)。这里是我的代码:

#include <stdio.h> 
#include <math.h> 
#include <string.h> 
#include <stdlib.h> 

char sentence[101] = { '\0' }; 
char alphabet[52]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 

int locateletter(char tolocate){ 
    int i=0; 
    for(i=0; i<52; i++){ 
      if(alphabet[i] == tolocate) 
        return i; 
    } 
} 

int main(void){ 
    int key1 = 0; 
    int key2 = 0; 
    int key3 = 0; 
    printf("Sentence: "); 
    scanf("%101[^\n]", sentence); 
    if(sentence[100] != '\0'){ 
     printf("You entered more than 100 characters. Block Caesar Cipher is exiting. Goodbye.\n"); 
     exit; 
    }else{ 
     printf("Keys: "); 

     scanf("%d %d %d", &key1, &key2, &key3); 
     int i=0; 
     for(i=0; i<100; i=i+3){ 
       if(isalpha(sentence[i])){ 
         int position = locateletter(sentence[i]); 
         while((position+key1)>51){ 
           key1 = position+key1-52; 
           position=0; 
         } 
         while((position+key1)<0){ 
           key1 = key1+position+52; 
           position=0; 
         } 
         sentence[i] = alphabet[position+key1]; 
       } 
     } 
     int k=1; 
     for(k=1; k<100; k=k+3){ 
       if(isalpha(sentence[k])){ 
         int position = locateletter(sentence[k]); 
         while((position+key2)>51){ 
           key2 = position+key2-52; 
           position=0; 
         } 
         while((position+key2)<0){ 
           key1 = key2+position+52; 
           position=0; 
         } 
         sentence[k] = alphabet[position+key2]; 
       } 
     } 
     int t=2; 
     for(t=2; t<100; t=t+3){ 
       if(isalpha(sentence[t])){ 
         int position = locateletter(sentence[t]); 
         while((position+key3)>51){ 
           key3 = position+key3-52; 
           position=0; 
         } 
         while((position+key3)<0){ 
           key1 = key3+position+52; 
           position=0; 
         } 
         sentence[t] = alphabet[position+key3]; 
       } 
     } 
     printf("Cipher: %s\nDone.\n", sentence); 

    } 
    return 0; 
} 

回答

5

我发现了错误。我负循环的while循环将值分配给key1而不是key2/3。

+1

+1良好的首次发贴和良好的自我回答。 – chux 2014-10-16 16:43:09