打印Caesar密码程序的结果

时间:2014-11-07 02:31:56

标签: c

我打算在打印加密邮件之前添加"Encrypted message: "

当我将printf语句放入"而#34;循环,我得到的东西: 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;
}

1 个答案:

答案 0 :(得分: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时,它不会去,因为条件将是错误的。