Caesar Cipher C程序无效

时间:2014-11-05 22:38:03

标签: c encryption

我有一个凯撒密码程序,我正在处理它,它涉及用另一个字母替换字母后面的固定数量的字母替换消息中的每个字母。此外,它忽略了数字和空格。但是,无论我尝试什么,程序都会立即终止。这是我到目前为止所拥有的;

#include <stdio.h>

char encrypt(char in, int key)
{
    while(in != '\n')
{
    if(in >= 'A' && in <= 'Z')
    {
        ((in-'A') + key) % 26 + 'A';
        printf("%s", in);
    }
        else if(in >= 'a' && in <= 'z')
    {
        ((in-'a') + key) % 26 + 'a';
        printf("%s", in);
    }
}
return 0;
}

int main()
{
int key;
String phrase;
char ch;

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

printf("Enter message to be encrypted:\n");
scanf(
encrypt(in, key);
return 0;
}

1 个答案:

答案 0 :(得分:0)

有很多问题。

主要问题是,您正在混合char的加密和短语的加密。您应该将问题分解为几个子问题。

  • 问题1:加密一个字符
  • 问题2:加密一个短语,其中包括加密该短语的每个字符:

工作解决方案:

#include <stdio.h>

char encryptchar(char in, int key)
{
  if (in >= 'A' && in <= 'Z')
  {
      in = ((in-'A') + key) % 26 + 'A';
  }
  else if(in >= 'a' && in <= 'z')
  {
      in = ((in-'a') + key) % 26 + 'a';
  }

  return in;
}


void encryptphrase(char phrase[], int key)
{
  int i = 0;
  char c ;
  while (c = phrase[i])
  {
    c = encryptchar(c, key);
    phrase[i] = c;
    i++;
  }
}


int main()
{
  int key;
  char phrase[100];

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

  printf("Enter message to be encrypted:\n");
  scanf("%s", phrase);
  encryptphrase(phrase, key);
  printf("%s\n", phrase);
  return 0;
}