簡體   English   中英

C語言簡單的Caesar密碼程序

[英]Simple Caesar Cipher Program in C

大家好,我開始學習C語言,我被要求專門編寫一個程序,一個凱撒密碼(因此,想法是將消息中的任何字母替換為字母下方三個位置的字母。)

我的實現應讀取一行文本,然后根據讀取的第一個字符執行加密或解密。 如果第一個字符是$,則應該對其余行進行加密,並在輸出之前加上字符?。 如果第一個字符是?,則應該解密其余的行,並在輸出之前加上字符$。

因此,例如:?Wr eh,ru qrw wr eh

輸出應為:$ To be,或不為

反之亦然。

到目前為止,這是我的代碼:

#include <stdio.h>

int main(void){
    char code[100], ch;
    int i;

    scanf("%s", &code);

    if(code[0]  == '$'){
        for(i = 0; code[i] != '\0'; ++i){
            ch = code[i];

            if(ch >= 'a' && ch <= 'z'){
                ch = ch + 3;

                if(ch > 'z'){
                    ch = ch - 'z' + 'a' - 1;
                }

                code[i] = ch;
            }
            else if(ch >= 'A' && ch <= 'Z'){
                ch = ch + 3;

                if(ch > 'Z'){
                    ch = ch - 'Z' + 'A' - 1;
                }

                code[i] = ch;
            }
        }
        printf("?%s\n", code);
        return 0;
    }
}

但是問題是,它返回第一個字符並在有空間時停止。 例如,我輸入:$ To是輸出到:?$ To

有人可以幫我弄清楚我在做什么錯嗎?

這是使用getchar()入門的示例:

#include <stdio.h>

int main() {
    int ch; // Either EOF or one of the chars in 0-255
    while ((ch = getchar()) != EOF) {
        if ('A' <= ch && ch <= 'Z') {
            int offset = ch - 'A';
            printf("%c", 'a' + offset);
        } else {
            printf("%c", ch);
        }
    }
}

現在,此代碼在許多方面都不是完美的,但確實演示了如何使用getchar() 每次調用getchar() ,它都會從標准輸入中獲取下一個char並將其作為int返回。 這是因為當輸入結束時,它將返回特殊值EOF ,它超出char范圍。

while循環是一個常見的習慣用法。 當執行到達循環時,它首先必須調用getchar() ,其結果存儲在ch 然后檢查ch是否為EOF 如果不是,則循環處理已讀取的字符。 否則,它退出並且程序結束。

循環的主體會打印它看到的每個字符,同時將大寫字母轉換為小寫字母。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM