簡體   English   中英

凱撒密碼程序的打印結果

[英]Printing result of Caesar cipher program

我正在嘗試在打印加密郵件之前添加"Encrypted message: "

當我將printf語句放入“ while”循環中時,我得到了AEncrypred message: BEncrypted message: CEncrypted message:等。

如果我嘗試將printf語句放在循環外,則不會輸出任何內容。

有沒有辦法在仍然使用putchar();在結果之前打印"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;
}
#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語句放入循環中。 該循環將解析您的printf語句? ,直到ch等於新行。 為防止您可以在范圍之外使用變量,並使用例如1的值進行初始化。 要解析printf語句,請在條件為該變量等於它的數字后再為其分配0或另一個數字。 因此,在下一次必須解析printf ,它將不會繼續,因為條件將為false。

暫無
暫無

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

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