2014-11-05 130 views
0

我有一個凱撒密碼程序,我正在處理,它涉及到替換信件中的每個字母與另一個字母后面的固定數量的位置。此外,它會忽略數字和空格。但是,無論我嘗試什麼,該程序都會立即終止。這是我迄今爲止;凱撒密碼C程序不工作

#include <stdio.h> 

char encrypt(char in, int key) 
{ 
    while(in != '\n') 
{ 
    if(in >= 'A' && in <= 'Z') 
    { 
     ((in-'A') + key) % 26 + 'A'; 
     printf("%s", in); 
    } 
     else if(in >= 'a' && in <= 'z') 
    { 
     ((in-'a') + key) % 26 + 'a'; 
     printf("%s", in); 
    } 
} 
return 0; 
} 

int main() 
{ 
int key; 
String phrase; 
char ch; 

printf("Enter shift amount (1-25):\n"); 
scanf("%d ", &key); 

printf("Enter message to be encrypted:\n"); 
scanf(
encrypt(in, key); 
return 0; 
} 
+0

'而(in!='\ n')':除了換行符以外的無限循環 – BLUEPIXY 2014-11-05 22:46:39

+0

@Jordan看看'scanf('。其餘的部分在哪裏? – chux 2014-11-06 01:50:49

+0

你的程序甚至沒有編譯。你應該縮進你的c頌。 – 2014-11-06 09:57:59

回答

0

有很多問題。

主要問題是,您正在混合字符的加密和短語的加密。你應該把問題分解成幾個子問題。

  • 問題1:加密一個單個字符
  • 問題2:加密一個短語,它由encrypring該短語的每一個字符的:

工作溶液:

#include <stdio.h> 

char encryptchar(char in, int key) 
{ 
    if (in >= 'A' && in <= 'Z') 
    { 
     in = ((in-'A') + key) % 26 + 'A'; 
    } 
    else if(in >= 'a' && in <= 'z') 
    { 
     in = ((in-'a') + key) % 26 + 'a'; 
    } 

    return in; 
} 


void encryptphrase(char phrase[], int key) 
{ 
    int i = 0; 
    char c ; 
    while (c = phrase[i]) 
    { 
    c = encryptchar(c, key); 
    phrase[i] = c; 
    i++; 
    } 
} 


int main() 
{ 
    int key; 
    char phrase[100]; 

    printf("Enter shift amount (1-25):\n"); 
    scanf("%d", &key); 

    printf("Enter message to be encrypted:\n"); 
    scanf("%s", phrase); 
    encryptphrase(phrase, key); 
    printf("%s\n", phrase); 
    return 0; 
}