我正在开发一个凯撒密码程序,它涉及将消息中的每个字母替换为字母表中后面固定数量位置的另一个字母。此外,它忽略数字和空格。但是,无论我尝试什么,程序都会立即终止。这是我到目前为止所拥有的;
#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:加密单个字符
- 问题 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;
}
关于凯撒密码 C 程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768508/