C 中的简单凯撒密码,无需用户输入
Simple caesar cipher in C with no user input
我需要编写一个程序,将特定消息 (S M Z V Q O P I V) 存储在一组 char 变量中,然后在一次一个字符输出解密消息之前应用 8 的移位值。通过使用包含多个 %c 说明符的格式字符串,输出应该看起来像一个字符串。
我只能找到需要用户输入的代码示例,虽然我只是将其修改为具有已经包含所需值的变量,但我正在努力理解代码应该如何迭代字符串 - 即 ch = ch - 'Z' + 'A' = 1,就在字母之间使用运算符而言,这实际上意味着什么?
这就是我目前所拥有的,尽管代码输出 [Ub^YWXQ^ 作为加密消息 - 有什么方法可以更正应该是字母的字符吗? Z应该变成H吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char message[] = "SMZVQOPIV";
int i;
int key = 8;
printf("%s", message);
char ch= message [i];
for(i = 0; message[i] !='[=10=]';++i)
{
ch = message[i];
if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;
if (ch > 'z'){
ch = ch - 'Z' + 'A' - 1;
}
message[i] = ch;
}
}
printf("Encrypted Message: %s", message);
return 0;
}
任何人都可以简单地告诉我代码应该是什么样子以及为什么吗?我已经有一段时间没有做任何编程了,我主要使用 Python,所以我对 C 有点迷茫。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char message[] = "SMZVQOPIV";
int i;
int key = 8;
printf("%s\n", message);
/*
* "printf("%s", message);" -> "printf("%s\n", message);"
* you have to print a newline('\n') by yourself,
* it's not automatic as "print" in python
*/
/*
* There was a "char ch= message [i];"
* unecessary and it gives error(i is not initialised)
*/
for (i = 0; message[i] != '[=10=]'; ++i)
{
char ch = message[i];
/*
* "ch = message[i];" -> "char ch = message[i];"
* when you define an object in C, you have to specify its type
*/
if (ch >= 'A' && ch <= 'Z') {
ch = ch + key;
if (ch > 'Z') {
/*
* Main error here, but just a blunder
* "if (ch > 'z') {" -> "if (ch > 'Z') {"
* Upper case is important ;), 'Z' is 90 in decimal,
* 'z' is 122
*/
ch = ch - 'Z' + 'A' - 1;
}
message[i] = ch;
}
}
printf("Encrypted Message: %s", message);
return 0;
}
我需要编写一个程序,将特定消息 (S M Z V Q O P I V) 存储在一组 char 变量中,然后在一次一个字符输出解密消息之前应用 8 的移位值。通过使用包含多个 %c 说明符的格式字符串,输出应该看起来像一个字符串。
我只能找到需要用户输入的代码示例,虽然我只是将其修改为具有已经包含所需值的变量,但我正在努力理解代码应该如何迭代字符串 - 即 ch = ch - 'Z' + 'A' = 1,就在字母之间使用运算符而言,这实际上意味着什么?
这就是我目前所拥有的,尽管代码输出 [Ub^YWXQ^ 作为加密消息 - 有什么方法可以更正应该是字母的字符吗? Z应该变成H吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char message[] = "SMZVQOPIV";
int i;
int key = 8;
printf("%s", message);
char ch= message [i];
for(i = 0; message[i] !='[=10=]';++i)
{
ch = message[i];
if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;
if (ch > 'z'){
ch = ch - 'Z' + 'A' - 1;
}
message[i] = ch;
}
}
printf("Encrypted Message: %s", message);
return 0;
}
任何人都可以简单地告诉我代码应该是什么样子以及为什么吗?我已经有一段时间没有做任何编程了,我主要使用 Python,所以我对 C 有点迷茫。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char message[] = "SMZVQOPIV";
int i;
int key = 8;
printf("%s\n", message);
/*
* "printf("%s", message);" -> "printf("%s\n", message);"
* you have to print a newline('\n') by yourself,
* it's not automatic as "print" in python
*/
/*
* There was a "char ch= message [i];"
* unecessary and it gives error(i is not initialised)
*/
for (i = 0; message[i] != '[=10=]'; ++i)
{
char ch = message[i];
/*
* "ch = message[i];" -> "char ch = message[i];"
* when you define an object in C, you have to specify its type
*/
if (ch >= 'A' && ch <= 'Z') {
ch = ch + key;
if (ch > 'Z') {
/*
* Main error here, but just a blunder
* "if (ch > 'z') {" -> "if (ch > 'Z') {"
* Upper case is important ;), 'Z' is 90 in decimal,
* 'z' is 122
*/
ch = ch - 'Z' + 'A' - 1;
}
message[i] = ch;
}
}
printf("Encrypted Message: %s", message);
return 0;
}