2014-11-07 23 views
0

我想在打印加密信息之前添加"Encrypted message: "凱撒密碼程序的打印結果

當我把printf聲明「而」循環中,我得到的線沿線的東西在裏面: AEncrypred message: BEncrypted message: CEncrypted message:

如果我試圖把printf聲明外循環,不執行打印作業。

有沒有辦法在結果前打印"Encrypted message: "而仍然使用putchar();

#include <stdio.h> 
#include <ctype.h> 

char encrypt(char in, int key) 
{ 
    if (isalpha(in)) 
    { 
     if (isupper(in)) 
     { 
      return (((in-'A') + key) % 26) + 'A'; 
     } 
     else 
     { 
      return (((in-'a') + key) % 26) + 'a'; 
     } 
    } 
    else return in; 
} 

int main() 
{ 
    int key; 
    char ch, res; 

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

    printf("Enter message to be encrypted:\n"); 
    getchar(); 

    while (ch != '\n') 
    { 
     ch = getchar(); 
     res = encrypt(ch, key); 
     putchar(res); 
    } 
    return 0; 
} 
+0

構建一個char數組並使用'printf'打印它 – 2014-11-07 02:36:33

+0

如果您正在讀取一個字符然後寫入一個字符,那麼在輸出之前不能輸出任何內容。你最終會得到你得到的輸出。一個更好的方法是首先接受所有的輸入,打印你的消息,然後一次打印加密的輸出,而不是一次處理一個字符。 – 2014-11-07 02:38:23

+0

賦值問:1.您必須使用getchar()輸入字符,並使用putchar()輸出字符。 2.由於您不知道消息的長度,因此無法將其存儲在數組中。您應該一次輸入,加密並輸出一個字符。 – FBZombies 2014-11-07 02:42:16

回答

0
#include <stdio.h> 
#include <ctype.h> 

char encrypt(char in, int key) 
{ 
    if (isalpha(in)) 
    { 
     if (isupper(in)) 
     { 
      return (((in-'A') + key) % 26) + 'A'; 
     } 
     else 
     { 
      return (((in-'a') + key) % 26) + 'a'; 
     } 
    } 
    else return in; 
} 

int main() 
{ 
    int key; 
    char ch, res; 
    int checksum = 1; 

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

    printf("Enter message to be encrypted:\n"); 
    getchar(); 

    while (ch != '\n') 
    { 
     ch = getchar(); 
     res = encrypt(ch, key); 
     if(checksum) { checksum = 0; printf("Encrypted message: "); } 
     putchar(res); 
    } 
    return 0; 
} 

我會用這種方式。如果你不喜歡它,請告訴我。 我剛剛解決它的方式不會違反你的代碼結構。


您的問題是將printf語句放入循環中。循環會解析你的狀態元素嗎?次,直到ch等於新行。爲了防止您可以在範圍外使用變量,請使用值例如1進行初始化。一旦你做了一個條件,如果該變量等於它的數字,然後分配0或另一個數字,就分析printf語句。所以在下一次printf必須解析,它不會去,因爲條件將是錯誤的。

+0

你能向我解釋這是如何工作的嗎?我還在學習。 – FBZombies 2014-11-07 02:50:19

+0

你會怎麼做? – FBZombies 2014-11-07 02:50:59

+0

然後我會更新帖子。 – Corelation 2014-11-07 02:51:28