在Eclipse中编译时,使用Caesar Cipher在C语言中遇到困难

时间:2014-11-07 02:28:06

标签: c encryption

我的问题是Eclipse没有告诉我我的代码中有什么错误,而且它正在编译。但是当我运行程序时没有任何反应。我甚至没有看到第一条printf线。

好的,这是提示:

您要编写一个使用Caesar密码加密消息的程序。用户将进入 密钥的值和要加密的消息。示例运行如下所示 你的程序的输出应该完全遵循这种格式。用户输入带有下划线。

输入班次金额(1-25):

3

输入要加密的邮件:

来吧,让我的一天。

加密邮件:Jr dkhdg,pdnh pb gdb。

我的代码:

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

char encrypt(char ch, int k){

    if (isalpha(ch)){

        if (isupper(ch)) {
            ch = ch + k;
            if (ch > 'Z') {
                ch = ch - k;
                ch = ((ch - 65) + k) % 26 + 65;
            }
        }
        else {
            ch = ch + k;
            if (ch > 'z'){
                ch = ch - k;
                ch = ((ch - 97) + k) % 26 + 97;
            }
        }
    }



    return ch;
}

void main(){
    int k = 0;
    char ch = 'a';
    printf("Enter shift amount (1-25):\n");
    scanf("%d ", &k);
    printf("Enter message to be encrypted:\n");
    ch = getchar();

    while(ch != '\n'){
        encrypt(&ch, k);
    }

    printf("\n");
    printf("Encrypted message: ");
    while(ch != EOF){
             putchar(ch);

        }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

小写字母ch = ch + k;可能会溢出char

使用%26数学执行int

    if (isupper(ch)) {
        ch = (ch - 'A' + k)%26 + 'A';
    }
    else if (isupper(ch)) {
        ch = (ch - 'a' + k)%26 + 'a';
    else {
        Report_BadInput();
    }

输入搞砸了

printf("Enter shift amount (1-25):\n");
// scanf("%d ", &k); The space really messes things up.
// The space tells `scanf()` to keep on scanning until non-white-space is found.
scanf("%d", &k);

读取和打印循环混乱。

printf("Enter message to be encrypted:\n");
int ch;  // Use int here
while ((ch = getchar()) != '\n') && (ch != EOF) {
  if (isalpha(ch) {
    ch = encrypt(ch, k);
  }
  putchar(ch);
}
putchar('\n');

答案 1 :(得分:0)

您的加密功能写得很糟糕。当你使用&ch时,你是在没有强制转换的情况下从指针创建一个整数,你应该强制转换或创建一个数组来存储输入。在这种情况下,在main()中添加返回值没有意义,因为它是void类型和程序的结束点。

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

void main(){
    static int x = 0;
    int k;
    char c;
    char cipher[ARRAYMAX] = {0};
    printf("Enter shift amount (1-25):\n");
    scanf("%d", &k);
    printf("Enter message to be encrypted:\n");
    scanf("%c", &c);
    while((c=getchar()) != '\n') {
        cipher[x++]=(char)(c+k);
    }
    printf("%s", cipher);
}

您可以在另一个函数中编写加密代码,并使用malloc创建一个数组而不指定它的大小(ARRAYMAX)。